web-dev-qa-db-fra.com

Mise à jour des enregistrements en masse 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 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?

20
user208662

Fais le:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID
38
Tocco

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.

25
gbn

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
3
George Johnston

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
2
Ejaz Waquif

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.

0
Jesse Webb