Как записать вывод оператора SQL в файл CSV? - PullRequest
0 голосов
/ 16 июня 2011

У нас есть задача скрипта, которая обрабатывает плоскую квартиру, вставляет данные в базу данных, затем записывает любые дубликаты (через хранимую процедуру) в таблицу SQL, которая затем передает ее в задачу рабочего потока, которая ищет эту таблицу и записываетвсе данные в файл затем переворачивают таблицу.

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

Есть ли способ записи плоского файла, в котором>> 0 записей в дублирующейся таблице журнала?

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Вот возможный вариант, который может дать вам представление об избавлении от файла ошибок, у которого нет записей.

Вот пошаговый процесс, как это сделать. В этом примере я использовал файл csv с именем Country_State.csv, содержащий страны и государства в качестве исходного файла.

Сценарий

Пример пакета прочитает файл, а затем запишет в текстовый файл с именем Destination.txt. В этом случае файл ошибок Error.txt будет создан, но позже будет удален, если ошибок нет. Здесь у меня есть файлы, хранящиеся в пути c:\temp\

Шаг за шагом:

  1. В разделе диспетчера соединений создайте три соединения с плоскими файлами, а именно: Источник , Адресат и Ошибка . Смотрите скриншот # 1 .
  2. Source соединение должно указывать на путь к файлу CSV c:\temp\Country_State.csv. См. Скриншот # 2 для содержимого этого файла.
  3. Destination соединение должно указывать на текстовый файл с именем c:\temp\Destination.txt.
  4. Error соединение должно указывать на текстовый файл с именем c:\temp\Error.txt.
  5. Создать переменную типа данных Int32 с именем ErrorCount.
  6. На вкладке Поток управления поместите Data Flow Task, а затем поместите File System Task.
  7. Подключите задачу потока данных к задаче файловой системы.
  8. Щелкните правой кнопкой мыши соединитель между задачей потока данных и задачей файловой системы.
  9. В Редакторе ограничений предшествования измените Оценочную операцию на Expression и вставьте значение @ErrorCount == 0 в текстовое поле Выражение .
  10. Ваш поток управления должен выглядеть так, как показано на скриншоте # 3 .
  11. Внутри задачи потока данных на вкладке потока данных перетащите источник плоских файлов и настройте его для использования Source диспетчера соединений.
  12. Поместите пункт назначения плоского файла и настройте его для использования Destination диспетчера соединений.
  13. Подключите зеленую выходную стрелку из источника плоских файлов к назначению плоских файлов.
  14. Поместите преобразование Row Count на вкладку потока данных и настройте его для использования переменной User:ErrorCount.
  15. Соедините красную выходную стрелку из источника плоских файлов с преобразованием количества строк.
  16. Поместите пункт назначения плоского файла и настройте его для использования Error диспетчера соединений.
  17. Подключите выход из числа строк к назначению плоского файла, используя соединение Error.
  18. Ваша задача потока данных должна выглядеть так, как показано на скриншоте # 4 .
  19. На вкладке Поток управления дважды щелкните Задачу файловой системы.
  20. В редакторе задач файловой системы установите Operation на Delete file и установите SourceConnection на Error. Смотрите скриншот # 5 .
  21. Содержимое пути к папке C:\temp перед выполнением пакета показано на скриншоте # 6 .
  22. Выполнение вкладки потока данных показано на скриншоте # 7 .
  23. Выполнение потока управления показано на скриншоте # 8 .
  24. Содержимое пути к папке C:\temp после выполнения пакета показано на скриншоте # 9 .
  25. Чтобы показать, что это действительно работает, я изменил второй столбец в диспетчере соединений Source на целое число (даже если имена состояний - строки), чтобы задача потока данных перенаправлялась на вывод Error.
  26. Сценарий 2 Выполнение вкладки потока данных показано на скриншоте # 10 .
  27. Сценарий 2 Выполнение потока управления показано на скриншоте # 11 . Обратите внимание, что задача «Файловая система» не выполнена, поскольку файл ошибок не пуст.
  28. Содержимое пути к папке C:\temp после сценария 2 Выполнение пакета показано на скриншоте # 12 . Обратите внимание, что файл Destination.txt присутствует, хотя не было успешных строк. Это связано с тем, что в примере удаляется только файл ошибок, если он пустой.

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

Надеюсь, это поможет.

Скриншот № 1:

1

Скриншот №2:

2

Скриншот № 3:

3

Снимок экрана № 4:

4

Снимок экрана № 5:

5

Снимок экрана № 6:

6

Снимок экрана № 7:

7

Снимок экрана № 8:

8

Снимок экрана № 9:

9

Снимок экрана № 10:

10

Снимок экрана № 11:

11

Снимок экрана № 12:

12

0 голосов
/ 16 июня 2011

Вы можете попробовать это..произвести скрипт перед выполнением задачи, чтобы проверить размер файла, и добавить «Ограничение приоритета» ... когда TRUE, а затем продолжить. с

Dim FileInfo As System.IO.FileInfo

Вы можете получить длину файла, например ... FileInfo.Length.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...