2012-02-07 5 views
0

Я хотел был бы сделать пакет который скопировал бы данные от таблицы только если таблица не пустая. Я знаю, как делать счет и как сделать пакет для копирования данных, но проблема в том, что у источника не может быть никаких входов, поэтому я не знаю, как это сделать. Какие-либо предложения?SSIS Скопируйте таблицу, если она не пуста

+0

Источник не может иметь какие-либо входы ??? – joshua

+0

Я хотел сказать, что вы не можете перетащить зеленую линию из пакета в источник ... или я ошибаюсь и что-то не хватает? –

ответ

1

Я не понимаю ваш комментарий о перетаскивании «зеленой линии из пакета в источник», но вместо того, чтобы пытаться определить заранее, если таблица пуста, просто сделайте свою копию в любом случае, а затем посмотрите, сколько строк было скопировано:

  1. Создайте переменный пакет для ROWCOUNT
  2. Заполняет переменный с помощью ROWCOUNT преобразования
  3. Используйте an expression in the precedence constraint проверить переменный: если она больше нуля, то продолжить выполнение остальной части пакета
+0

Если таблица не пуста, я должен усечь дезинтеграцию, иначе оставить ее как есть. Я имел в виду, что невозможно использовать, например, компонент условного разделения (который будет проверять, является ли таблица пустым), ограничение приоритета перетаскивания из него в источник OLE DB, откуда я буду выбирать данные для копирования. –

+0

это работает, спасибо !! –

0

@Pondlife Я не думаю, что вы можете использовать ограничение приоритета для задачи потока данных, не так ли? Я считаю, что вы можете использовать его только в потоке управления.

Я бы добавил «Выполнение SQL-задачи» с подсчетом, посылая результат переменной и из этой задачи, я бы перетащил зеленую стрелку в задачу потока данных, которая делает копию, и на этой стрелке я бы добавил выражение для ограничения приоритета.

+0

вы правы в отношении ограничения приоритета, но это не имеет особого значения: если у вас есть строка в переменной, вы можете использовать ее везде, где переменная может использоваться как в потоках данных, так и в потоках управления. Ваше предложение достигнет того же, что и мое, несколько иначе. – Pondlife

0

Как вы правильно отметили, источник потока данных не принимает ввод, поэтому невозможно выполнить логику в потоке данных, чтобы определить, должна ли эта задача выполняться.

Cannot create connector. 
The destination component does not have any available inputs for use in creating a path. 

Однако, нет ничего, что помешает вам настроить эту логику в потоке управления. Я бы использовал запрос, который попадает в DMVs for a fast rowcount в систему назначения, отфильтрован только для таблиц, которые я хотел воспроизвести.

Вооружившись списком пустых таблиц, это, вероятно, будет зависеть от того, как я буду справляться с этим. Для небольшого числа таблиц я бы определил N потоков данных, все с задачей ничего не делали в качестве прецедента, а затем использовали выражение для имени таблицы, чтобы включить путь, как я сделал на этом question.

Если есть много таблиц, я бы определил пакет для каждой таблицы, а затем вызовет задачу выполнения пакета с именем пакета, созданным динамически на основе имени пустой таблицы.

Смежные вопросы