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

¿Puedo usar la instrucción MERGE en SQL Server 2005?

MERGE se introdujo en SQL Server 2008. Si desea utilizar esa sintaxis, deberá actualizar.

De lo contrario, el enfoque típico dependerá de dónde provengan los datos de origen. Si es solo una fila y no sabe si necesita actualizar o insertar, probablemente haría lo siguiente:

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END

Si su fuente es una tabla #temp, variable de tabla, TVP u otra tabla, puede hacer lo siguiente:

UPDATE dest SET ...
  FROM dbo.destination AS dest
  INNER JOIN dbo.source AS src
  ON dest.key = src.key;

INSERT dbo.destination SELECT ... FROM dbo.source AS src
  WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);

Al igual que con MERGE (y como Michael Swart demostró aquí ), aún querrá rodear cualquiera de estos métodos con transacciones adecuadas, manejo de errores y nivel de aislamiento para que se comporte como una sola operación real. Incluso un solo MERGE declaración no lo protege de la concurrencia.

He publicado algunas otras precauciones sobre MERGE en más detalles aquí .