Du har ikke helt SQL Servers proprietære UPDATE FROM
syntaks ned. Er heller ikke sikker på, hvorfor du skulle deltage på CommonField
og filtrer også på det bagefter. Prøv dette:
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';
Hvis du laver noget virkelig fjollet - som konstant at forsøge at sætte værdien af en kolonne til aggregatet af en anden kolonne (hvilket er i strid med princippet om at undgå lagring af overflødige data), kan du bruge et CTE (common table expression) - se her og her for flere detaljer:
;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];
Grunden til, at dette er virkelig fjollet, er, at du bliver nødt til at køre hele denne opdatering igen hver gang en række i table2
ændringer. En SUM
er noget, du altid kan beregne under kørslen, og ved at gøre det behøver du aldrig bekymre dig om, at resultatet er forældet.