Нямате съвсем собствения UPDATE FROM
на SQL Server синтаксис надолу. Също така не сте сигурни защо трябва да се присъедините към CommonField
и също филтрирайте върху него след това. Опитайте това:
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';
Ако правите нещо наистина глупаво - като непрекъснато се опитвате да зададете стойността на една колона на съвкупността от друга колона (което нарушава принципа за избягване на съхраняването на излишни данни), можете да използвате CTE (израз за обща таблица) - вижте тук и тук за повече подробности:
;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];
Причината, поради която това е наистина глупаво, е, че ще трябва да стартирате отново цялата тази актуализация всеки път, когато всеки ред в table2
промени. A SUM
е нещо, което винаги можете да изчислите по време на изпълнение и по този начин никога не трябва да се притеснявате, че резултатът е остарял.