Службы SSIS, загружающие плоские файлы .csv с использованием For Each Loop Container: выполнить выражение задачи SQL, чтобы заполнить таблицу аудита счетчиком строк - PullRequest
0 голосов
/ 03 января 2019

Я загружаю много CSV-файлов в таблицу SQL Server, используя SSIS (Visual Studio 2017).

Я использую для каждого контейнера цикла. У меня есть две пользовательские переменные - FileName (строка) и RowCnt (int)

Я разработал таблицу аудита (dbo.FEfiles) для отслеживания каждого загруженного файла и количества записей в каждом файле.

Таблица аудита имеет два столбца:

1) FileName (varchar (20)

2) RowCount (int)

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

В этой задаче «Выполнение SQL» на вкладке «Выражение» в разделе «SQLStatementSource» у меня есть следующее выражение, чтобы получить только имя файла:

"INSERT INTO dbo.FEfiles (FileName) SELECT '" + @ [User :: Filename] + "'"

Это правильно анализирует, когда я вычисляю выражение, я получаю:

INSERT INTO dbo.FEfiles (FileName) ВЫБРАТЬ «filename.CSV»

Теперь, как мне добавить переменную для RowCnt с целочисленным типом данных?

Я пробовал много вариантов, таких как приведенный ниже:

"INSERT INTO dbo.FEfiles (FileName, RowCount) SELECT '" + @ [Пользователь :: Имя файла] + "', + (DT_WSTR, 12) @ [User :: RowCnt]"

Когда я вычисляю выражение, я получаю следующее:

INSERT INTO dbo.FEfiles (FileName, RowCount) ВЫБРАТЬ «filename.CSV», + (DT_WSTR, 12) @ [User :: RowCnt]

Мне нужно вместо этого получить это: INSERT INTO dbo.FEfiles (FileName, RowCount) SELECT 'filename.CSV', 0

Не могли бы вы помочь мне получить правильное выражение?

Я даже смотрел это видео, но не смог понять:

https://www.youtube.com/watch?v=Um7tDy9jZRs

enter image description here

1 Ответ

0 голосов
/ 03 января 2019

Дайте этому водоворот.

"INSERT INTO dbo.FEFiles (FileName,RowCount) VALUES ('" + @[User::Filename] + "'," +  (DT_WSTR, 12) @[User::RowCnt] + ")"

В комментариях пользователей приходилось указывать RowCount в скобках для имени столбца.

"INSERT INTO dbo.FEFiles (FileName,[RowCount]) VALUES ('" + @[User::Filename] + "'," + (DT_WSTR, 12) @[User::RowCnt] + ")"

Строковые части

"INSERT INTO dbo.FEFiles (FileName,[RowCount]) VALUES ('" 
+ 
@[User::Filename] 
+ 
"'," 
+  
(DT_WSTR, 12) @[User::RowCnt] 
+ 
")"
...