2012-05-11 35 views
17

tengo un proceso de flujo de datos en las que tengo una fuente de OLEDB y un destino de OLE DB, como a continuación:actualizar filas en SSIS OLEDB Destino

Data Flow Task

Fuente combina datos de dos tablas de parada y devuelve un conjunto de resultados (decir, 50K filas). Estas filas de 50 K también están presentes en la tabla de destino, pero son datos antiguos.

SELECT * FROM staging1 
UNION 
SELECT * FROM staging2 

En general, en el destino OLEDB que insertar el conjunto de datos devuelto desde la fuente a la tabla de destino, pero en mi caso tengo que actualizar las viejas filas 50K 50K con estas nuevas filas.

Tipo de una actualización a granel.

¿Alguien puede decirme cómo puedo hacer eso? Aprecio tu ayuda.

Respuesta

1

Bueno, encontré una solución a mi problema; Actualizando todas las filas usando una consulta SQL y una tarea SQL en SSIS como a continuación. Puede ayudar a otros si enfrentan el mismo desafío en el futuro.

update Original 
set Original.Vaal= t.vaal 
from Original join (select * from staging1 union select * from staging2) t 
on Original.id=t.id 
11

Use Lookupstage para decidir si insertar o actualizar. Comprobar este enlace para obtener más información - http://beingoyen.blogspot.com/2010/03/ssis-how-to-update-instead-of-insert.html

pasos para hacer la actualización:

  1. Arrastre OLEDB Comando [lugar de destino oledb]
  2. Ir a la ventana de propiedades
  3. En Propiedades personalizadas seleccione SQLCommand y inserte el comando de actualización, por ejemplo:

    UPDATE table1 SET col1 =?, col2 =? donde id =?

  4. mapa columnas en el orden exacto de la fuente a la salida como en el comando de actualización

+0

rs, lea mi pregunta nuevamente; Ya sé que tiene que ser actualizado y no hay necesidad de decidir. Solo quiero saber, ¿cómo hago para actualizar un grader a granel? – Rahul

+0

¿Has leído ese artículo? Le dirá cómo generar un script para actualizar las filas y también el concepto sobre cómo puede actualizar en SSIS –

+0

Rahul es correcto. El artículo vinculado realizará actualizaciones de singleton para todas las 50k filas. Eso va a ser lento y doloroso. Su deseo es emitir una única declaración de actualización que combine los datos de una sola vez. – billinkc

25

No se puede hacer una mayor actualización en SSIS dentro de una tarea de flujo de datos con los componentes fuera de banda.

El patrón general consiste en identificar sus inserciones, actualizaciones y eliminaciones y enviar las actualizaciones y eliminaciones a una tabla de etapas y después de la Tarea de flujo de datos, usar una actualización basada en conjuntos o eliminar en una tarea Ejecutar SQL. Mira el Stairway to Integration Services series de Andy Leonard. Desplácese aproximadamente 3/4 hacia abajo del artículo a "Actualizaciones basadas en conjuntos" para ver el patrón.

registro de escalones

http://www.sqlservercentral.com/Images/11369.png

basado Configurar actualizaciones

enter image description here

Usted obtendrá un rendimiento mucho mejor con un patrón de esta manera frente a la utilización de la transformación OLE DB Command para nada más que cantidades triviales de datos.

Si le gustan las herramientas de terceros, creo que CozyRoc y sé que PragmaticWorks tienen un componente de destino de fusión.

+1

Sí, esta es la respuesta/confirmación que estaba buscando; un sencillo NO :). Mala suerte, no puedo buscar herramientas de terceros. – Rahul

+5

Tengo que registrarme para leer un artículo ?! – statikuz

+2

@statikuz Estoy de acuerdo, pero con https://www.guerrillamail.com/ solo toma unos segundos – Turch

Cuestiones relacionadas