Таблица копирования служб SSIS, если она не пуста - PullRequest
0 голосов
/ 07 февраля 2012

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

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

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

  1. Создание переменной пакета для rowcount
  2. Заполнение переменной с использованием преобразования rowcount
  3. Использование выражения в ограничении приоритета дляпроверьте переменную: если она больше нуля, продолжайте выполнение остальной части вашего пакета
0 голосов
/ 07 февраля 2012

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

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

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

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

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

0 голосов
/ 07 февраля 2012

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

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

...