Если вам нужно удалить строки в Задаче потока данных , то вам нужно использовать преобразование OLE DB Command
и написать оператор DELETE, например DELETE FROM dbo.Table WHERE ColumnName = ?
.Затем в сопоставлениях столбцов преобразования Команды OLE DB вы сопоставите параметр, представленный знаком вопроса, с данными, полученными в результате предыдущего преобразования.В вашем случае это данные, которые поступают из Union All 2.
Однако я бы не рекомендовал эту опцию, потому что Команда OLE DB выполняется для каждой строки и может замедлить ваш пакет, еслислишком много строк.
Я бы порекомендовал что-то вроде этого:
Перенаправить вывод из Union All 2
во временную промежуточную таблицу (скажем, dbo.Staging ) с использованием OLE DB Destination .
Давайте предположим, что ваша конечная таблица назначения - dbo.Destination .Теперь в вашей промежуточной таблице есть все записи, которые следует удалить из таблицы «Назначение».
На вкладке Поток управления поместите Execute SQL Task
после Data Flow Task
.В задаче «Выполнение SQL» напишите оператор SQL или используйте хранимую процедуру, которая будет вызывать оператор SQL, чтобы объединить записи между промежуточной и целевой, чтобы удалить все соответствующие строки из таблицы назначения.
Кроме того, поместите еще одну задачу «Выполнение SQL» перед задачей «Поток данных».В этой задаче «Выполнение SQL» удалите / обрежьте строки из промежуточной таблицы.
Примерно так может сработать для удаления строк:.
DELETE D
FROM dbo.Destination D
INNER JOIN dbo.Staging S
ON D.DestinationId = S.StagingId
Надеюсь, что это поможет.