Du har inte riktigt SQL Servers proprietära UPDATE FROM
syntax ner. Osäker på varför du behövde gå med på CommonField
och även filtrera på det efteråt. Prova detta:
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';
Om du gör något riktigt dumt - som att ständigt försöka sätta värdet på en kolumn till aggregatet av en annan kolumn (vilket bryter mot principen att undvika att lagra överflödig data), kan du använda en CTE (common table expression) - se här och här för mer information:
;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];
Anledningen till att detta är riktigt dumt är att du kommer att behöva köra om hela den här uppdateringen varje gång som helst i table2
ändringar. En SUM
är något du alltid kan beräkna under körning och, på så sätt, aldrig behöver oroa dig för att resultatet är inaktuellt.