Как запустить команду «Вставить / обновить OLEDB» на основе условного разделения, которое проверяет Rowcount == 0 в SSIS - PullRequest
2 голосов
/ 03 ноября 2019

Источник DFT когда-нибудь не даст результата. Поэтому необходимо вставить / обновить таблицу, основываясь на некотором значении по умолчанию, которое определено в производном столбце. Как вы можете видеть на прилагаемом рисунке, я использую условное разбиение и проверяю Rowcount == 0, если это условие удовлетворяет, то обработает команду OLEDB, где я использую простой оператор Insert

INSERT INTO [dbo].[Invalid]
           (Code]
           ,[Date]
           ,[CreatedDate]
           ,[UpdatedDate])
     VALUES
           (?
           ,?
           ,GETDATE()
           ,GETDATE())

Код изначение даты определяется в производном столбце и отображается в сопоставлениях столбца команды OLEDB.

задача потока данных выглядит следующим образом

enter image description here

Когда количество строк в источнике Oledb> 0, значение добавляется в пункт назначения OLEDB. но когда rowcount = 0, значение не вставляется через команду OLEDB. Задача потока данных не возвращает никакой ошибки. Когда я отлаживаю переменную rowcount, она показывает ее значение как 0, но все равно не выполняет вставку.

Пожалуйста, дайте мне знать, как решить эту проблему.

Я не хочу использовать MERGE JOIN / Lookup для этого, поскольку он всегда вставляет / обновляет одну строку.

1 Ответ

2 голосов
/ 03 ноября 2019

Конечно, если число строк = 0, то он не будет обрабатывать никакие команды, так как в конвейере не найдено ни одной строки, которая не будет выполнять команду OLE DB. Я думаю, что вы ищете задачу «Выполнить SQL».

Вы должны удалить условное разбиение и команду OLE DB. А вне задачи потока данных добавьте задачу «Выполнение SQL» после задачи потока данных и задайте выражение в ограничении приоритета (если число строк = 0), которое связывает задачу «Поток данных» и задачу «Выполнение SQL».

Дополнительную информацию об ограничении приоритета можно найти в следующей статье:

...