Sie haben nicht ganz das proprietäre UPDATE FROM
von SQL Server Syntax nach unten. Sie sind sich auch nicht sicher, warum Sie dem CommonField
beitreten mussten und danach auch danach filtern. Versuchen Sie Folgendes:
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';
Wenn Sie etwas wirklich Dummes tun – wie ständig zu versuchen, den Wert einer Spalte auf den Aggregatwert einer anderen Spalte zu setzen (was gegen das Prinzip der Vermeidung redundanter Datenspeicherung verstößt), können Sie einen CTE (Common Table Expression) verwenden – siehe hier und hier für weitere Details:
;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];
Der Grund, warum dies wirklich albern ist, ist, dass Sie dieses gesamte Update jedes Mal erneut ausführen müssen, wenn eine Zeile in table2
angezeigt wird Änderungen. Eine SUM
ist etwas, das Sie immer zur Laufzeit berechnen können und sich dabei nie Sorgen machen müssen, dass das Ergebnis veraltet ist.