2009-11-25 31 views
6

Estoy copiando algunos datos de usuario de un SqlServer a otro. Llámalos Alpha y Beta. El paquete SSIS se ejecuta en Beta y obtiene las filas en Alpha que cumplen una determinada condición. El paquete luego agrega las filas a la tabla de Beta. Muy simple y eso funciona genial.¿Cómo se obtiene un paquete SSIS para insertar solo nuevos registros al copiar datos entre servidores?

El problema es que solo quiero agregar nuevas filas en Beta. Normalmente, simplemente haría algo simple como ....

INSERT INTO BetaPeople 
SELECT * From AlphaPeople 
where ID NOT IN (SELECT ID FROM BetaPeople) 

Pero esto no funciona en un paquete SSIS. Al menos no sé cómo y ese es el objetivo de esta pregunta. ¿Cómo se podría hacer esto en los servidores?

+0

¿qué versión/edición? –

Respuesta

4

Su ejemplo parece simple, parece que está agregando solo personas nuevas, no buscando datos modificados en registros existentes. En este caso, almacene la última ID en el DB.

CREATE TABLE dbo.LAST (RW int, LastID Int) 
go 
INSERT INTO dbo.LAST (RW, LastID) VALUES (1,0) 

Ahora puede usar esto para insertar la última ID de la fila transferida.

UPDATE dbo.LAST SET LastID = @myLastID WHERE RW = 1 

Al seleccionar fuente OLEDB, establezca el modo de acceso a datos a de comandos SQL y utilizar

DECLARE @Last int 
SET @Last = (SELECT LastID FROM dbo.LAST WHERE RW = 1) 
SELECT * FROM AlphaPeople WHERE ID > @Last; 

Nota, yo supongo que está utilizando para su ID int IDENTITY PK.

Si tiene que supervisar los cambios en los datos de los registros existentes, tenga la columna "último cambio" en cada tabla y almacene la hora de la última transferencia.

A diferente técnica implicaría la configuración de un servidor vinculado en Beta a Alpha y ejecutando su ejemplo sin utilizar SSIS. Esperaría que esto sea mucho más lento y requiera más recursos que la solución SSIS.

INSERT INTO dbo.BetaPeople 
SELECT * FROM [Alpha].[myDB].[dbo].[AlphaPeople] 
WHERE ID NOT IN (SELECT ID FROM dbo.BetaPeople) 
2

Este es el clásico problema de detección de Delta. La mejor solución es usar Change Data Capture con/sin SSIS. Si lo que está buscando es una actividad única en la vida, no necesita buscar SSIS. Utilice otros medios como servidor vinculado y compárelo con registros existentes.

+2

Hola Faiz: tu respuesta sería más útil si explicaras qué es Change Data Capture. – Mike

3

método más simple que he utilizado es el siguiente:

  • Consulta Alpha en una tarea Fuente en un flujo de datos y llevar en los registros para el flujo de datos.
  • Realice las Transformaciones necesarias.
  • Antes de escribir en Destino (Beta) realice una búsqueda que coincida con la columna de ID de Alfa a las de Beta. En la primera página del editor de transformación de búsqueda, asegúrese de seleccionar "Redirigir filas a resultados no coincidentes" en la lista desplegable "Especificar cómo gestionar las filas con el error coincidente"
  • Enlazar la tarea de búsqueda al destino. Esto le dará un aviso donde puede especificar que son las filas sin correspondencia que desea insertar.
+1

Gracias por editar @ Mike Para aclarar, la respuesta se escribió para una versión anterior de SSIS y la actualizó al comportamiento de versiones más recientes. –

0

Lo que sigue debe resolver tema de los registros de carga cambiado y nuevos con SSIS:

  1. extraer datos de flujo de datos Fuente SINA.
  2. Extraer datos del objetivo.
  3. Coincidencia en la clave principal Agregue registros no coincidentes y divida los registros coincidentes y no coincidentes de los registros de origen y coincidencia de Target call them Matched_Source, Unmatch_Source y Matched_Target.
  4. Compara Matched_Source y Matched_Target y divide Matched_Source en Modificado y sin cambios.
  5. Carga nula TempChanged Table.
  6. Agregue registros modificados a TempChanged.
  7. Ejecute el script SQL/proc almacenado para eliminar registros del destino para la clave primaria en TempChanged y agregue registros en TempChanged al destino.
  8. Agregue Unmatched_Source al destino.
1

enter image description here

  1. Añadir una búsqueda entre su origen y el destino
  2. Haga clic derecho en el cuadro de búsqueda para abrir Editor de transformación Búsqueda.
  3. Elija [Redirigir filas para que no coincida la salida.
  4. enter image description here
  5. columnas abiertas, mapa Sus columnas de clave,
  6. Añadir una entrada con la clave de la tabla en la columna de búsqueda, operación de búsqueda como enter image description here
  7. cuadro de búsqueda Conectar a destino, elija [Operaciones de búsqueda sin salida partido]
Cuestiones relacionadas