J'ai deux tables dans un environnement SQL Server 2008 avec la structure suivante
Table1
- ID
- DescriptionID
- Description
Table2
- ID
- Description
Table1.DescriptionID correspond à Table2.ID. Cependant, je n'en ai plus besoin. Je voudrais faire une mise à jour groupée pour définir la propriété Description de Table1 à la valeur qui lui est 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 sais pas si c'est l'approche appropriée. Quelqu'un peut-il me montrer comment procéder?
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 en tout cas!)
UPDATE
T1
SET
[Description] = t2.[Description]
FROM
Table1 T1
JOIN
[Table2] t2 ON t2.[ID] = t1.DescriptionID
Cela et votre requête doivent exécuter les mêmes performances, car il s'agit de la même requête, simplement présentée différemment.
Vous pouvez le faire via un UPDATE
régulier 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 Join 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 prévoyez d'exécuter ceci sur une PROD DB, il est préférable de créer d'abord un instantané ou un miroir de celui-ci et de le tester. vérifiez que les données finissent comme prévu pour quelques enregistrements. Et si vous êtes satisfait, exécutez-le sur la vraie base de données.