Compartir a través de


Antes y después del Merge – Upsert SQL Server (es-ES)

 Hace poco tiempo un cliente me comentaba sobre la necesidad de ejecutar comandos de tipo UPSERT, típicamente este proceso lo venía haciendo de forma manual, hacia una revisión uno a uno de los campos y luego mediante estructuras en TSQL hacia la carga o la actualización a su base de datos, por eso me dispuse a escribir este post.

Desde la versión 2008 de Microsoft SQL Server, contamos con una nueva forma de actualizar o insertar datos a una tabla, este comando nos permite ir un paso más allá y en una sola transacción efectuar todo el proceso, de golpe y sin mayores complicaciones.

Antes del MERGE

CREATE PROC SINMERGE
    @BK_CLIENTE INT,
    @NUEVADIRECCION VARCHAR(100)
AS
BEGIN
    SET NOCOUNT ON;
--ACTUALIZAR LA FILA DEL CLIENTE
    UPDATE CLIENTE
    SET DIRECCION = @NUEVADIRECCION
    WHERE IDCLIENTE = @BK_CLIENTE
--VERIFICAR SI SE ACTUALIZO ALGUNA FILA
    IF (@@ROWCOUNT = 0)
        BEGIN
            INSERT INTO  CLIENTE (IDCLIENTE, DIRECCION)
            VALUES (@BK_CLIENTE, @NUEVADIRECCION)
        END
END

 

Después del MERGE

CREATE PROC CONMERGE
    @BK_CLIENTE INT,
    @NUEVADIRECCION VARCHAR(100)
AS
BEGIN
    MERGE CLIENTE AS  DESTINO
    USING (SELECT @BK_CLIENTE, @NUEVADIRECCION) AS FUENTE (IDCLIENTE, DIRECCION)
    ON (DESTINO.IDCLIENTE = FUENTE.IDCLIENTE)
    WHEN MATCHED THEN
        UPDATE SET  DIRECCION = FUENTE.DIRECCION
    WHEN NOT MATCHED  THEN
        INSERT (IDCLIENTE, DIRECCION)
        VALUES (FUENTE.IDCLIENTE, FUENTE.DIRECCION)
END