No tiene la UPDATE FROM
sintaxis propietaria de SQL Server desactivada. Tampoco estoy seguro de por qué necesitaba unirse CommonField
y luego filtrarlo. Prueba esto:
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 está haciendo algo realmente tonto, como tratar constantemente de establecer el valor de una columna en el agregado de otra columna (que viola el principio de evitar el almacenamiento de datos redundantes), puede usar un CTE (expresión de tabla común), consulte aquí y aquí para más detalles:
;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 razón por la que esto es realmente tonto, es que tendrá que volver a ejecutar esta actualización completa cada vez que haya una fila en los table2
cambios. A SUM
es algo que siempre se puede calcular en tiempo de ejecución y, al hacerlo, nunca tiene que preocuparse de que el resultado sea obsoleto.
UPDATE table1 a SET a.[field] = b.[field]
: eliminar el alias sí funciona, así queUPDATE table1 a SET [field] = b.[field]