J'ai deux tables dans un environnement SQL Server 2008 avec la structure suivante
Table1 - ID - DescriptionID - Description Table2 - ID - Description
Table1.DescriptionID mappe à Table2.ID. Cependant, je n'en ai plus besoin. Je voudrais effectuer une mise à jour en bloc pour définir la propriété Description de Table1 à la valeur associée dans Table2. En d'autres termes, je veux faire quelque chose comme ça:
UPDATE [Table1] SET [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
Cependant, je ne suis pas sûr si c'est l'approche appropriée. Quelqu'un peut-il me montrer comment faire cela?
Fais le:
update Table1 set Description = t2.Description from Table1 t1 inner join Table2 t2 on t1.DescriptionID = t2.ID
Votre approche est OK
Peut-être un peu plus clair (pour moi quand même!)
UPDATE T1 SET [Description] = t2.[Description] FROM Table1 T1 JOIN [Table2] t2 ON t2.[ID] = t1.DescriptionID
Cette requête et votre requête doivent être exécutées de la même manière car il s'agit de la même requête, mais différemment.
Vous pouvez le faire grâce à une mise à jour régulière avec un JOIN
UPDATE T1 SET Description = T2.Description FROM Table1 T1 JOIN Table2 T2 ON T2.ID = T1.DescriptionId
Ou vous pouvez simplement mettre à jour sans utiliser de jointure comme ceci:
Update t1 set t1.Description = t2.Description from @tbl2 t2,tbl1 t1 where t1.ID= t2.ID
Vous SQL que vous avez posté dans votre question est une façon de le faire. La plupart des choses dans SQL ont plus d'une façon de le faire.
UPDATE [Table1] SET [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
Si vous envisagez de l'exécuter sur une database PROD, il est préférable de créer d'abord un instantané ou un miroir et de le tester. vérifiez que datatables se terminent comme prévu pour quelques loggings. Et si vous êtes satisfait, lancez-le sur le vrai DB.