SQL Server MERGE (Español)
Resumen: en este tutorial, aprenderá a usar SQL Server MERGE
declaración para actualizar los datos en una tabla en función de los valores coincidentes de otra tabla.
Introducción Declaración MERGE de SQL Server
Suponga que tiene dos tablas llamadas tablas de origen y de destino, y necesita actualice la tabla de destino en función de los valores coincidentes de la tabla de origen. Hay tres casos:
- La tabla de origen tiene algunas filas que no existen en la tabla de destino. En este caso, debe insertar filas que están en la tabla de origen en la tabla de destino.
- La tabla de destino tiene algunas filas que no existen en la tabla de origen. En este caso, debe eliminar filas de la tabla de destino.
- La tabla de origen tiene algunas filas con las mismas claves que las filas de la tabla de destino. Sin embargo, estas filas tienen valores diferentes en las columnas que no son clave. En este caso, debe actualizar las filas de la tabla de destino con los valores que provienen de la tabla de origen.
La siguiente imagen ilustra las tablas de origen y destino con las acciones correspondientes: insertar, actualizar y eliminar:
Si use la instrucción INSERT
, UPDATE
y DELETE
individualmente, debe construir tres declaraciones para actualizar los datos a la tabla de destino con las filas coincidentes de la tabla de origen.
Sin embargo, SQL Server proporciona la instrucción MERGE
que le permite realizar tres acciones al mismo tiempo. A continuación se muestra la sintaxis de la instrucción MERGE
:
Code language: SQL (Structured Query Language) (sql)
Primero, especifica la tabla de destino y la fuente tabla en la cláusula MERGE
.
En segundo lugar, la merge_condition
determina cómo las filas de la tabla fuente se corresponden con las filas de la tabla de destino. Es similar a la condición de combinación en la cláusula de combinación. Normalmente, utiliza las columnas de clave, ya sea clave principal o clave única para la coincidencia.
En tercer lugar, merge_condition
da como resultado tres estados: MATCHED
, NOT MATCHED
y NOT MATCHED BY SOURCE
.
-
MATCHED
: estas son las filas que coinciden con la condición de fusión. En el diagrama, se muestran en azul. Para las filas coincidentes, debe actualizar las columnas de las filas en la tabla de destino con valores de la tabla de origen. -
NOT MATCHED
: estas son las filas de la fuente tabla que no tiene filas coincidentes en la tabla de destino. En el diagrama, se muestran en naranja. En este caso, debe agregar las filas de la tabla de origen a la tabla de destino. Tenga en cuenta queNOT MATCHED
también se conoce comoNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: estas son las filas de la tabla de destino que no coinciden con ninguna fila de la tabla de origen. Se muestran en verde en el diagrama. Si desea sincronizar la tabla de destino con los datos de la tabla de origen, deberá utilizar esta condición de coincidencia para eliminar filas de la tabla de destino.
Ejemplo de declaración MERGE de SQL Server
Supongamos que tenemos dos tablas sales.category
y sales.category_staging
que almacenan las ventas por categoría de producto.
Para actualizar los datos a la sales.category
(tabla de destino) con los valores de la sales.category_staging
(tabla de origen), utilice la siguiente MERGE
declaración:
En este ejemplo, usamos los valores de las columnas category_id
en ambas tablas como condición de combinación.
- Primero, las filas con id 1, 3, 4 de la
sales.category_staging
la tabla coincide con las filas de la tabla de destino, por lo tanto, la instrucciónMERGE
actualiza los valores en las columnas de nombre de categoría y cantidad en lasales.category
tabla. - En segundo lugar, las filas con los ID 5 y 6 de la
sales.category_staging
no existen en la tablasales.category
, por lo que la instrucciónMERGE
inserta estas filas en la tabla de destino. - En tercer lugar, la fila con id 2 de la tabla
sales.category
no existe en la tablasales.sales_staging
, por lo tanto, laMERGE
elimina esta fila.
Como resultado de la fusión, los datos de la tabla sales.category
están completamente sincronizados con los datos de la sales.category_staging
.
En este tutorial, ha aprendido a usar la instrucción MERGE
de SQL Server para realizar cambios en una tabla según los valores coincidentes de otra tabla.