Declaración de fusión de SQL Server

Declaración de fusión de SQL Server

Las bases de datos tienen que ver con las operaciones de Crud. Creamos, leemos, actualizamos y eliminamos datos en varias tablas de bases de datos. Sin embargo, la mayoría de las operaciones CRUD en una base de datos requieren una lógica separada para tareas, como insertar, actualizar y eliminar.

Esto puede ser redundante rápidamente. SQL Server proporciona una forma eficiente de realizar operaciones CRUD utilizando la declaración de fusión. Microsoft introdujo la declaración de fusión en SQL Server 2008 y superior.

Este tutorial comprenderá cómo usar la instrucción SQL Server Merge para realizar múltiples operaciones en una sola consulta.

Los basicos

Tomemos un ejemplo de dónde tiene dos mesas. Las tablas de destino y fuente. Si necesita actualizar los valores en la tabla de destino en función de los valores de las tablas de origen, puede tomar tres rutas:

  1. El primero es donde la fuente contiene filas faltantes en la tabla de destino. Necesita una declaración de inserción en la tabla de destino en tal caso.
  2. El segundo es donde la tabla de destino contiene registros faltantes de la tabla de origen. Aquí, necesitamos una declaración de eliminación para eliminar las filas del objetivo.
  3. El último escenario es donde un registro en la fuente y el objetivo posee valores diferentes. Necesitamos una declaración de actualización en la tabla de destino en tal caso.

Para realizar las operaciones anteriores individualmente, necesitamos crear tres lógicas separadas para las operaciones de insertar, eliminar y actualizar. Sin embargo, podemos combinarlos usando la declaración de fusión.

Podemos expresar la sintaxis de la declaración de fusión como se muestra:

Fusionar Target_table usando Source_Table
En condicion
Cuando coinciden
Luego update_operation
Cuando no se coincide, por tabla objetivo
Luego insert_operation
Cuando no coincide con la fuente
Luego eliminar;

Identificamos la tabla de destino y fuente y los especificamos en la cláusula de fusión. Luego especificamos una condición. La condición especificada controla cómo las filas de la tabla de origen coinciden con las tablas de destino. Piense en ello como una condición de unión.

El siguiente bloque contiene las acciones que se realizarán en función del resultado de la condición especificada.

Si la condición da como resultado una coincidencia, actualizamos los registros en la tabla de destino desde la tabla de origen.

Sin embargo, si los registros son inigualables (desde la tabla de destino), insertamos los registros faltantes en la tabla de destino.

Finalmente, si los registros son inigualables (por la tabla de destino), eliminamos los registros inigualables de la tabla de destino.

SQL Server - Ejemplo de fusión

Tomemos un ejemplo simple. Suponga que tenemos dos tablas que contienen información del producto como Products_Target y Product_Source.

El fragmento de código de ejemplo muestra las consultas SQL para crear y actualizar las tablas especificadas.

Usar salesDB;
Crea Table Products_Target (
Product_id int no identidad de clave primaria nula (1,1),
product_name varchar (255) no nulo,
precio decimal (10,2)
);
Insertar en productos_target (product_name, precio)
Valores ('escritorio de oficina', 531),
('Presidente de la oficina', 379.99),
('Botella de agua', 69.99);
Crea Table Products_source (
Product_id int no identidad de clave primaria nula (1,1),
product_name varchar (255) no nulo,
precio decimal (10,2)
);
Insertar en productos_source (product_name, precio)
Valores ('escritorio de oficina', 531.00),
('Lámpara de escritorio', 50.00),
('Presidente de la oficina', 699.99),
('Botella de agua', 89.95);

Ahora tenemos dos tablas que funcionan como objetivo y fuente. Los registros almacenados en las tablas son como se muestra:

Para sincronizar los datos entre el objetivo y la tabla de origen, podemos ejecutar una consulta de fusión como se muestra en el siguiente ejemplo:

Fusionar productos_target como t
Uso de productos_source como S
En (s.product_id = t.ID del Producto)
Cuando coinciden
Luego actualizar el conjunto
T.product_name = s.nombre del producto,
T.precio = s.precio
Cuando no coincide con el objetivo
Luego inserte (product_name, precio)
Valores (s.Product_Name, S.precio)
Cuando no coincide con la fuente
Luego eliminar;

Una vez que ejecutemos la consulta anterior, el servidor SQL realizará las operaciones especificadas en función de la condición resultante.

Podemos consultar las tablas después de la operación de fusión como:

Seleccionar * de Products_source;
Seleccionar * de Products_Target;

Los valores resultantes son los que se muestran en el siguiente ejemplo:


Como notará, los registros de la tabla de origen y de destino se sincronizan con los valores actualizados, insertados y eliminados.

Conclusión

Esta guía le muestra cómo trabajar con la instrucción SQL Server Merge. Le permite realizar operaciones de insertar, actualizar y eliminar en tablas basadas en las condiciones resultantes.

Gracias por leer!