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.
CREATE
PROC SINMERGE
@BK_CLIENTE
INT
,
@NUEVADIRECCION
VARCHAR
(100)
AS
BEGIN
SET
NOCOUNT
ON
;
--ACTUALIZAR LA FILA DEL CLIENTE
UPDATE
CLIENTE
DIRECCION = @NUEVADIRECCION
WHERE
IDCLIENTE = @BK_CLIENTE
--VERIFICAR SI SE ACTUALIZO ALGUNA FILA
IF (@@ROWCOUNT = 0)
INSERT
INTO
CLIENTE (IDCLIENTE, DIRECCION)
VALUES
(@BK_CLIENTE, @NUEVADIRECCION)
END
PROC CONMERGE
MERGE CLIENTE
DESTINO
USING (
SELECT
@BK_CLIENTE, @NUEVADIRECCION)
FUENTE (IDCLIENTE, DIRECCION)
(DESTINO.IDCLIENTE = FUENTE.IDCLIENTE)
WHEN
MATCHED
THEN
DIRECCION = FUENTE.DIRECCION
NOT
(IDCLIENTE, DIRECCION)
(FUENTE.IDCLIENTE, FUENTE.DIRECCION)