У меня есть ряд данных, которые производятся по состоянию и типу информации. Для каждого состояния у меня есть, например, 3 файла, которые имеют идентификатор в имени файла, чтобы сообщить мне, для какой информационной группы он предназначен. Данные в этих файлах состоят из строк данных, которые имеют различную длину в зависимости от типа файла. Тип 1 всегда имеет 245 значений, разделенных запятыми, Тип 2 имеет 215, Тип 3 имеет 300.
У меня есть 3 отдельных пакета служб SSIS 2005, настроенных для импорта этих данных, но мне было интересно, есть ли способ сделать это в одном пакете с помощью задачи условного разделения или задачи сценариев.
Я пробовал условное разделение, но мне кажется, что он должен проверить значение строки. Затем я посмотрел на код здесь , который использует задачу сценариев. Я не могу заставить этот код компилироваться, так как он жалуется на «DTS не определен» Вероятно, это один из тех случаев, когда автор предполагает, что у меня есть знания в некоторых, для него, базовой идее SSIS - и что у меня нет этих знаний.
Я изменил код там, чтобы быть:
Imports System
Imports System.Data
Imports System.Math
Imports System.IO
Imports Microsoft.SqlServer.Dts.Runtime
Public Class ScriptMain
' Created: Zack Bethem – AmberLeaf
Public Sub Main()
Dim fileLoc, fileName As String
If Dts.Variables.Contains("User::fileName") = True Then
fileName = CStr(Dts.Variables.Item("User::fileName").Value)
If fileName.Contains("0074000") Then
Dts.Variables.Item("User::SexByInd").Value = True
ElseIf fileName.Contains("0072000") Then
Dts.Variables.Item("User::SexByOcc").Value = True
ElseIf fileName.Contains("0022000") Then
Dts.Variables.Item("User::Migration").Value = True
End If
Dts.TaskResult = Dts.Results.Success
Else
Dts.TaskResult = Dts.Results.Failure
End If
End Sub
End Class
Как видно из кода:
Я перебираю файлы в каталоге, используя цикл For Each.
Я присваиваю имя файла для каждого файла User::fileName
, а затем проверяю, содержит ли имя файла один из 3 строковых элементов.
Если он содержит тип 1, то он переходит в другую ветвь, чем тип 2 / тип 3 и т. Д.
Поскольку этот код не компилируется, я не могу проверить, сработает ли остальная часть его примера. Я не уверен, какую задачу по написанию сценариев он использует, так как мне было предложено 3 варианта, но все они включали в себя какую-то манипуляцию строкой или элементом строки данных из «Входных данных для задания сценариев». То, что я хочу сделать, это передать User::fileName
в качестве ввода и получить, а затем протестировать логические значения других 3 User::
переменных, чтобы сделать 3 ветви.
Мое нынешнее мышление таково:
Внутри одиночного цикла «Для каждого цикла» есть эта задача потока данных:
Scripting Task
/ | \
(Type1) (Type2) (Type3)
| | |
CSV_Files1 CSV_Files2 CSV_Files3
| | |
OLEDB_Dest1 OLEDB_Dest2 OLEDB_Dest3
Где CSV_Files1-3 использует уникальный файл SourceConnectionFlat для чтения / сопоставления столбцов с таблицами OLEDB_Dest.
редактирует: