Non hai ancora UPDATE FROM
proprietario di SQL Server sintassi giù. Inoltre, non sono sicuro del motivo per cui dovevi unirti a CommonField
e anche filtrare su di esso in seguito. Prova questo:
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 stai facendo qualcosa di veramente stupido, come cercare costantemente di impostare il valore di una colonna sull'aggregato di un'altra colonna (che viola il principio di evitare la memorizzazione di dati ridondanti), puoi usare un CTE (espressione di tabella comune) - vedi qui e qui per maggiori dettagli:
;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];
Il motivo per cui è davvero sciocco è che dovrai rieseguire l'intero aggiornamento ogni singola riga in table2
i cambiamenti. Una SUM
è qualcosa che puoi sempre calcolare in fase di esecuzione e, così facendo, non devi mai preoccuparti che il risultato sia obsoleto.