Tengo dos tablas SQL Server idénticas (SOURCE
y DESTINATION
) con muchas columnas en cada una. Quiero insertar en la tabla DESTINATION
filas de la tabla SOURCE
que no existen ya en la tabla DESTINATION
. Defino la igualdad entre las dos filas si todas las columnas coinciden, excepto la marca de tiempo, una columna de conteo y la clave primaria entera. Así que quiero insertar en DESTINATION
todas las filas en SOURCE
que ya no existen en DESTINATION
ignorando el recuento, la marca de tiempo y las columnas de la clave principal.fusionando el contenido de dos tablas sin duplicar el contenido
¿Cómo puedo hacer esto?
Gracias por todas las contribuciones! Elegí usar el comando Merge porque está estructurado para permitir actualizaciones e insertos en una declaración y necesitaba hacer la actualización por separado.
este es el código que funcionó:
Merge
into DESTINATION as D
using SOURCE as S
on (
D.Col1 = S.Col1
and D.Col2 = S.Col2
and D.Col3 = S.Col3
)
WHEN MATCHED
THEN UPDATE SET D.Count = S.Count
WHEN NOT MATCHED THEN
INSERT (Col1, Col2, Col3, Count, timestamp)
VALUES (S.Col1, S.Col2, S.Col3, S.Count, S.timestamp);
nota: cuando escribí esta pregunta primero llamé a las tablas AAA
y BBB
. Me editar y cambiar los nombres de AAA
a SOURCE
Y BBB
a DESTINATION
para mayor claridad
Excelente caso de uso para el comando MERGE. –
¡Gran respuesta! No estaba enterado de MERGE, pero todavía estoy usando 2005 (por unas semanas más), definitivamente lo usaré en el futuro. – richardtallent
Estoy tratando de descubrir cómo usarlo. el ejemplo en la documentación requiere que revise los elementos en la tabla AAA. Creo que usar la selección correcta debería evitar eso. – Barka