Si tiene que eliminar las filas dentro de datos Flujo de tareas, entonces usted necesita para utilizar la transformación OLE DB Command
y escribir una instrucción DELETE como DELETE FROM dbo.Table WHERE ColumnName = ?
. Luego, en las asignaciones de columnas de la transformación del comando OLE DB, asignará el parámetro representado por el signo de interrogación con los datos que provienen de la transformación anterior. En su caso, los datos que provienen de Union All 2.
Sin embargo, no recomendaría esa opción porque OLE DB Command se ejecuta para cada fila y puede ralentizar su paquete si hay demasiadas filas.
recomendaría algo como esto:
redirigir la salida de la Union All 2
a una tabla de etapas temporales (por ejemplo dbo.Staging) usando Destino de OLE DB.
Supongamos que su tabla de destino final es dbo.Destination. Ahora, su tabla de etapas tiene todos los registros que deben eliminarse de la tabla Destino.
En la pestaña Flujo de control, colocar un Execute SQL Task
después de la Data Flow Task
. En la tarea Ejecutar SQL, escriba una instrucción SQL o use un procedimiento almacenado que llamaría a una instrucción SQL para unir los registros entre la Etapa y el Destino para eliminar todas las filas correspondientes de la tabla Destino.
Además, coloque otra tarea de ejecución de SQL antes de la tarea de flujo de datos. En esta tarea Ejecutar SQL, elimine/trunque las filas de la tabla de etapas.
Algo como esto podría funcionar para eliminar las filas :.
DELETE D
FROM dbo.Destination D
INNER JOIN dbo.Staging S
ON D.DestinationId = S.StagingId
Espero que ayude.
Esto suena como un buen plan.Lo intentaré ahora y le dejaré saber los resultados. ¡Gracias, Siva! –
Por cierto, ¿cuál es su sugerencia para hacer dbo.Staging table temporal? Crear una nueva tarea de flujo de datos que eliminará esta tabla? ¿O elimino solo datos y dejo la tabla temporal siempre allí? –