sql >> Base de Datos >  >> RDS >> Sqlserver

¿Actualizar una tabla usando JOIN en SQL Server?

No tienes la propiedad UPDATE FROM de SQL Server sintaxis abajo. Tampoco estoy seguro de por qué necesitabas unirte a CommonField y también filtrarlo después. 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 (lo que viola el principio de evitar el almacenamiento de datos redundantes), puede usar una 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 cualquier fila en table2 cambios. Una SUM es algo que siempre puede calcular en tiempo de ejecución y, al hacerlo, nunca tendrá que preocuparse de que el resultado sea obsoleto.