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?
5 answers
Faz isso:
update Table1
set Description = t2.Description
from Table1 t1
inner join Table2 t2
on t1.DescriptionID = t2.ID
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.
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
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
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.