Ответ 1
Следующий пример, созданный в SSIS 2005
, считывает CSV файлы из заданной папки и вставляет данные в таблицу SQL. После импорта данных в SQL файлы затем перемещаются в папку "Архив" с помощью "Файловая система".
Шаг за шагом:
-
Создайте папку с именем Archive in path C:\temp. Создайте два CSV файла с именем File_1.csv и File_2.csv и заполните их данными. Оставьте папку архива пустым. См. Скриншоты # 1 - # 4.
-
В пакете SSIS создайте 5 переменных, как показано на скриншоте # 5. Задайте переменную RootFolder со значением
C:\temp\
. Задайте переменную FilePattern со значением*.csv
. -
Выберите переменную FilePath и нажмите F4, чтобы открыть свойства, измените свойство EvaluateAsExpression на
True
и установите для свойства Expression значение@[User::RootFolder] + @[User::FileName]
, как показано на скриншоте # 6. -
Выберите переменную ArchiveFolder и нажмите F4, чтобы открыть свойства, измените свойство EvaluateAsExpression на
True
и установите для свойства Expression значение@[User::RootFolder] + "Archive\\"
, как показано на снимке экрана # 7. -
В диспетчере соединений пакетов SSIS создайте новое соединение с плоским файлом с именем CSV. Обратите внимание на скриншот # 8. Настройте плоское подключение к файлу, как показано на скриншотах # 9 - # 13. Кроме того, создайте соединение OLE DB с именем SQLServer для подключения к базе данных SQL Server. После создания соединений он должен выглядеть так, как показано на скриншоте # 14.
-
Щелкните правой кнопкой мыши по соединению с плоским файлом CSV и выберите свойства и настройте выражение ConnectionString со значением @[User:: FilePath] с помощью кнопки Ellipsis, как показано на скриншотах # 15 - # 16.
-
Создайте таблицу с именем
dbo.Items
в SQL Server, используя сценарии, указанные в разделе SQL Scripts. Данные CSV файлов будут вставлены в эту таблицу. -
На вкладке "Управление потоком" поместите
Foreach Loop container
,Data Flow Task
иFile System Task
, как показано на снимке экрана 17. -
Настройте контейнер Foreach Loop, как показано на скриншотах # 18 - # 19.
-
Внутри задачи потока данных поместите источник плоского файла, преобразование производного столбца и назначение OLE DB, как показано на снимке экрана < 20.
-
Настройте источник плоского файла, как показано на скриншотах # 21 и # 22. Это будет читать данные из CSV файлов.
-
Настройте преобразование производного столбца, как показано на скриншоте # 23. Это используется для создания значения столбца FilePath с использованием переменной с тем же именем.
-
Настройте назначение OLE DB, как показано на скриншотах # 24 и @ 25. Это вставляет данные в таблицу SQL.
-
На вкладке "Управление потоком" настройте задачу "Файловая система", как показано на скриншоте # 26. Обратите внимание, что в то время как операция Переместить файл,
DestinationVariable
может быть указана только как каталог и не может быть указана как полный путь к файлу. Если вы укажете путь к файлу, вы получите сообщение об ошибке[File System Task] Error: An error occurred with the following error message: "Could not find a part of the path.".
-
Снимок экрана # 28 показывает, что перед выполнением пакета нет данных в таблице.
-
Скриншоты # 29 и # 30 демонстрируют выполнение пакетов внутри вкладок Flow Flow и Data Flow.
-
Скриншоты # 31 и # 32 показывают, что файлы были перемещены в папку архива.
-
Снимок экрана # 33 показывает данные в таблице после выполнения пакета.
-
В Задаче Файловой системы для свойства
OverwriteDestination
установлено значение False (это значение по умолчанию). Если вы перемещаете файлы с одинаковыми именами в папку Archive, вы получите сообщение об ошибке[File System Task] Error: An error occurred with the following error message: "Cannot create a file when that file already exists. ".
, показанное на снимке экрана < 34. Чтобы избежать этого, параметр OverwriteDestination равен True или другой вариант - переименовать файлы и скопировать их в папку Archive, а затем удалить их.
Надеюсь, что это поможет.
Сценарии SQL:
CREATE TABLE [dbo].[Items](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ItemNumber] [varchar](30) NOT NULL,
[Price] [numeric](18, 2) NOT NULL,
[FilePath] [varchar](255) NOT NULL,
CONSTRAINT [PK_Items] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO
Снимок экрана №1:
Снимок экрана №2:
Снимок экрана №3:
Снимок экрана №4:
Снимок экрана № 5:
Снимок экрана № 6:
Снимок экрана № 7:
Снимок экрана # 8:
Снимок экрана № 9:
Снимок экрана № 10:
Снимок экрана № 11:
Снимок экрана № 12:
<Т411 >
Снимок экрана № 13:
Снимок экрана № 14:
Снимок экрана № 15:
Снимок экрана №16:
Снимок экрана № 17:
Снимок экрана № 18:
Снимок экрана # 19:
Снимок экрана №20:
Снимок экрана № 21:
Снимок экрана № 22:
Снимок экрана № 23:
Снимок экрана № 24:
Снимок экрана № 25:
Снимок экрана № 26:
Снимок экрана № 27:
Снимок экрана № 28:
Снимок экрана № 29:
Снимок экрана № 30:
Снимок экрана № 31:
Снимок экрана № 32:
Снимок экрана № 33:
Снимок экрана № 34: