Nemáte zcela vlastní proprietární UPDATE FROM
SQL Serveru dolů syntaxe. Také si nejste jisti, proč jste se potřebovali připojit k CommonField
a poté na něj také filtrovat. Zkuste toto:
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';
Pokud děláte něco opravdu hloupého - například se neustále snažíte nastavit hodnotu jednoho sloupce na agregaci jiného sloupce (což porušuje zásadu vyhnout se ukládání nadbytečných dat), můžete použít CTE (běžný tabulkový výraz) - viz zde a zde pro více podrobností:
;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];
Důvod, proč je to opravdu hloupé, je ten, že celou tuto aktualizaci budete muset znovu spustit pokaždé, když jakýkoli řádek v table2
Změny. SUM
je něco, co můžete vždy vypočítat za běhu, a přitom se nemusíte bát, že výsledek je zastaralý.