SSIS-удаление строк
Я новичок в SSIS и нуждаюсь в помощи в этом. Я нашел статьи который описывает, как обнаружить строки, которые существуют и которые изменились. Часть, которую мне не хватает, - это обновление строк, которые изменились. Я нашел некоторые статьи, в которых говорится, что это также хорошее решение для удаления записей, которые изменились, и вставки нового набора записей. Дело в том, что я не знаю, как сделать этот шаг удаления (красный ящик).
какие предложения?

3 ответов
Если вам нужно удалить строки внутри Задача Потока Данных, тогда вам нужно использовать OLE DB Command преобразование и написать оператор DELETE, как DELETE FROM dbo.Table WHERE ColumnName = ?. Затем в сопоставлениях столбцов преобразования команды OLE DB параметр, представленный вопросительным знаком, сопоставляется с данными, полученными из предыдущего преобразования. В вашем случае данные, которые поступают от Union All 2.
однако я бы не рекомендовал этот вариант, потому что OLE DB Команда выполняется для каждой строки, и это может замедлить ваш пакет, если есть слишком много строк.
Я бы рекомендовал что-то вроде этого:
- перенаправить вывод от - Union All 2временную промежуточную таблицу (скажем dbo.Постановка) через назначение OLE DB.
- давайте предположим, что ваша конечная таблица назначения dbo.Пунктом. Теперь, ваша промежуточная таблица имеет все записи, которые следует удалить из назначения таблицы. 
- на Поток Управления tab, поместите - 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
надеюсь, это поможет.
кроме user756519 ответ. Если у вас есть миллионы записей, чтобы удалить последний шаг (4) для инструкции Executesql Delete, можно сделать в пакетах с чем-то вроде этого:
WHILE (1=1)
BEGIN
    DELETE D
    from dbo.Destination D
    inner join
    (
        -- select ids that should be removed from table
        SELECT TOP(10000) DestinationId
        FROM
            (
            SELECT
                D1.DestinationId,
                S.StagingId
            from 
                dbo.Destination as D1
            LEFT JOIN
                dbo.Staging as S
            ON
                D1.DestinationId = S.StagingId
            ) AS G
        WHERE
            StagingId IS NULL
    ) as R
    on D.DestinationId = R.DestinationId;
    IF @@ROWCOUNT < 1 BREAK
    -- info message
    DECLARE @timestamp VARCHAR(50)
    SELECT @timestamp = CAST(getdate() AS VARCHAR)
    RAISERROR ('Chunk deleted %s', 10, 1,@timestamp) WITH NOWAIT
END
Я рекомендую вам использовать ложку (чайник) это более гибкий, он имеет инструмент проектирования под названием "Поиск измерения/обновление", который поможет вам поддерживать таблицу измерений, вы можете указать, какое действие вы хотите, зависит от изменений столбца (обновить запись, вставить новую запись) все это на основе контроля времени версии записей.
