Mise à jour de l'logging en bloc avec SQL

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.