Sintaxis MERGE para UPDATE e INSERT en SQL

11249561_709970452446250_7647334140762527602_o

Quien no se ha topado con tener que hacer un UPDATE o INSERT según si existe o no el record en la tabla, es algo engorroso el tener que meter un IF para tomar esa decisión o inclusive tener que hacer un select para ver si el record existe o no y tomar la decisión.

Para este tipo de situaciones podemos usar la sentencia MERGE que nos proporciona MSSQL la cual se encarga de decidir que hacer ante esta situación, veamos un poco más sobre esta sentencia.

Creemos una tabla donde el CODE sea el KEY:

 

CREATE TABLE TestMerge

(Code NVARCHAR(10),

Description NVARCHAR(50),

);

GO

 

Ahora vamos a generar la sentencia MERGE para poder agregar o actualizar valores en esta tabla:

 

 

MERGE dbo.TestMerge AS T

USING (SELECT 'CODE1', 'Description CODE1') AS S (Code, Description)

ON (T.Code = S.Code)

WHEN MATCHED THEN

UPDATE SET Description = S.Description

WHEN NOT MATCHED THEN

INSERT (Code, Description)

VALUES (S.Code, S.Description);

 

Como podemos ver después de la palabra MERGE agregamos la tabla en la cual queremos agregar o actualizar la información, ésta será conocida como el TARGET (T)

 

MERGE dbo.TestMerge AS T

 

 

En la siguiente línea tenemos el USING en la cual declaramos de donde va a tomar la información que será enviada al TARGET, esta se conoce como el SOURCE (S)

 

USING (SELECT 'CODE1', 'Description CODE1') AS S (Code, Description)

 

En la línea del ON es donde vamos a filtrar la información y tomaremos la decisión de hacer un INSERT o un UPDATE, en este caso estamos filtrando en base al CODE.

 

ON (T.Code = S.Code)

 

Ahora vamos a ver el primer escenario, cuando el record existe en nuesta tabla

WHEN MATCHED THEN

UPDATE SET Description = S.Description

 

En este caso cuando existe hacemos un UPDATE a nuestr ainformación, acutalizamos el Description. Ahora validamos cuando el record no existe hacemos el INSERT, lo validamos de la siguiente forma:

 

WHEN NOT MATCHED THEN

INSERT (Code, Description) VALUES (S.Code, S.Description);

 

Ahora solo necesitamos ejecutar nuestro código para ver que es lo que sucede.

Caso 1.- La tabla no tiene ningún registro.

Al ejecutar el código este agregará un nuevo registro a la tabla

 

Como podemos ver el registro fue insertado correctamente en la tabla. 

Caso 2.- Actualizar un registro existente 

Ahora cambiaremos la Description del CODE1 a Description CHANGED 

 

MERGE dbo.TestMerge AS T 

USING (SELECT 'CODE1', 'Description CHANGED') AS S (Code, Description)   

ON (T.Code = S.Code)   

WHEN MATCHED THEN    

UPDATE SET Description = S.Description   

WHEN NOT MATCHED THEN   

INSERT (Code, Description)   

VALUES (S.Code, S.Description); 

 

 

Como Podemos ver el Description fue cambiado por el nuevo valor. 

 

Usar el MERGE que nos proporciona MSSQL es una gran ayuda, solo es necesario poner atención de los valores que usaremos para hacer el filtro y tomar la decisión de hacer el INSERT o el UPDATE. 

Sintaxis MERGE para UPDATE e INSERT en SQL

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *