Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Atualizar uma tabela usando JOIN no SQL Server?


Você não tem o UPDATE FROM proprietário do SQL Server sintaxe para baixo. Também não sei por que você precisava participar do CommonField e também filtrá-lo depois. Tente isto:
UPDATE t1
  SET t1.CalculatedColumn = t2.[Calculated Column]
  FROM dbo.Table1 AS t1
  INNER JOIN dbo.Table2 AS t2
  ON t1.CommonField = t2.[Common Field]
  WHERE t1.BatchNo = '110';

Se você estiver fazendo algo realmente bobo - como tentar constantemente definir o valor de uma coluna para o agregado de outra coluna (o que viola o princípio de evitar armazenar dados redundantes), você pode usar um CTE (expressão de tabela comum) - veja aqui e aqui para mais detalhes:
;WITH t2 AS
(
  SELECT [key], CalculatedColumn = SUM(some_column)
    FROM dbo.table2
    GROUP BY [key]
)
UPDATE t1
  SET t1.CalculatedColumn = t2.CalculatedColumn
  FROM dbo.table1 AS t1
  INNER JOIN t2
  ON t1.[key] = t2.[key];

A razão pela qual isso é realmente bobo é que você terá que executar novamente toda essa atualização toda vez que qualquer linha em table2 mudanças. Uma SUM é algo que você sempre pode calcular em tempo de execução e, ao fazê-lo, nunca precisa se preocupar que o resultado seja obsoleto.