Vous n'avez pas tout à fait le propriétaire de SQL Server UPDATE FROM
syntaxe vers le bas. Je ne sais pas non plus pourquoi vous deviez rejoindre le CommonField
et aussi filtrer dessus par la suite. Essayez ceci :
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';
Si vous faites quelque chose de vraiment stupide - comme essayer constamment de définir la valeur d'une colonne sur l'agrégat d'une autre colonne (ce qui viole le principe d'éviter de stocker des données redondantes), vous pouvez utiliser un CTE (expression de table commune) - voir ici et ici pour plus de détails :
;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];
La raison pour laquelle c'est vraiment idiot, c'est que vous allez devoir réexécuter cette mise à jour entière à chaque fois qu'une ligne dans table2
changements. Une SUM
est quelque chose que vous pouvez toujours calculer au moment de l'exécution et, ce faisant, vous n'avez jamais à vous soucier que le résultat soit obsolète.