Actualização do registo global com SQL

tenho duas tabelas num ambiente SQL Server 2008 com a seguinte estrutura

Table1
- ID
- DescriptionID
- Description

Table2
- ID
- Description

Quadro 1.Descrição Table2.ID no entanto, já não preciso dela. Eu gostaria de fazer uma atualização em massa para definir a propriedade de descrição do Table1 para o valor associado com ele no Table2. Por outras palavras, quero fazer algo assim:

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)
No entanto, não sei se esta é a abordagem apropriada. Alguém me pode mostrar como fazer isto?

Author: Brian Tompsett - 汤莱恩, 2011-07-08

5 answers

Faz isso:

update      Table1
set         Description = t2.Description
from        Table1 t1
inner join  Table2 t2
on          t1.DescriptionID = t2.ID
 37
Author: Tocco, 2011-07-08 18:56:58

A tua abordagem é OK

Talvez um pouco mais claro.)
UPDATE
  T1
SET
  [Description] = t2.[Description]
FROM
   Table1 T1
   JOIN
   [Table2] t2 ON t2.[ID] = t1.DescriptionID

Tanto esta como a sua consulta devem executar o mesmo desempenho sábio, porque é a mesma consulta, apenas definido de forma diferente.

 24
Author: gbn, 2011-07-08 19:03:19

Você pode fazer isso através de um regular UPDATE com um JOIN

UPDATE T1
SET Description = T2.Description
   FROM Table1 T1
      JOIN Table2 T2
         ON T2.ID = T1.DescriptionId
 3
Author: George Johnston, 2011-07-08 18:57:42

Ou pode simplesmente actualizar sem usar o join desta forma:

Update t1 set  t1.Description = t2.Description from @tbl2 t2,tbl1 t1
where t1.ID= t2.ID
 2
Author: Ejaz Waquif, 2015-03-12 10:12:04

Você SQL você postou em sua pergunta é uma maneira de fazê-lo. A maioria das coisas em SQL tem mais de uma maneira de fazê-lo.

UPDATE
  [Table1] 
SET
  [Description]=(SELECT [Description] FROM [Table2] t2 WHERE t2.[ID]=Table1.DescriptionID)

Se você está planejando executar isso em um Prod DB, é melhor criar um instantâneo ou espelho dele primeiro e testá-lo para fora. verificar os dados acaba como você espera para alguns registros. E se você estiver satisfeito, execute-o no DB real.

 0
Author: Jesse Webb, 2011-07-08 18:58:05