Я изучаю SSIS, и это кажется легкой задачей, но я застрял.
У меня есть файл CSV Orders.csv с этими данными:
ProductId,Quantity,CustomerId
1,1,104
2,1,105
3,2,106
У меня также есть хранимая процедура ssis_createorder, которая принимает в качестве входных параметров:
@productid int
@quantity int
@customerid int
Что я хочу сделать, так это создать пакет служб SSIS, который принимает файл .csv в качестве входных данных и трижды вызывает ssis_createorder для каждой строки в файле .csv (первая строка содержит имена столбцов).
Вот что я сделал до сих пор.
Я создал пакет служб SSIS (Visual Studio 2005 и SQL Server 2005).
В потоке управления у меня есть задача потока данных.
Поток данных имеет источник плоского файла моего файла .csv. Все столбцы сопоставлены.
Я создал переменную с именем orders типа Object. У меня также есть переменные CustomerId, ProductId и количество типа int32.
Далее у меня есть пункт назначения набора записей, который назначает содержимое файла .csv в порядке varialbe. Я не уверен, как использовать этот инструмент. Я устанавливаю VariableName (в разделе «Свойства клиента») для User :: orders. Я думаю, что теперь orders содержит набор записей ADO, составленный из содержимого исходного файла .csv.
Далее я добавляю контейнер цикла ForEach в тег потока управления и связываю его с задачей потока данных.
Внутри контейнера циклов ForEach я устанавливаю для Enumerator значение «ForEach ADO Enumerator». Я устанавливаю "переменную источника объекта ADO" в User :: orders ". Для режима перечисления я выбираю" Rows in the first table ".
На вкладке «Сопоставление переменных» у меня есть User :: ProductId index 0, User :: Количественный индекс 1, User :: CustomerId index 2. Я не уверен, правильно ли это.
Далее у меня есть задача сценария внутри контейнера цикла ForEach.
У меня для ReadOnlyVariables установлено значение ProductId.
В методе Main это то, что я делаю:
Dim sProductId As String = Dts.Variables("ProductId").Value.ToString
MsgBox("sProductId")
Когда я запускаю пакет, мой контейнер цикла ForEach становится ярко-красным, и я получаю следующие сообщения об ошибках
Error: 0xC001F009 at MasterTest: The type of the value being assigned to variable "User::ProductId" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 1 to variable "User::ProductId" cannot be applied.
Error: 0xC001F009 at MasterTest: The type of the value being assigned to variable "User::Quantity" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 2 to variable "User::Quantity" cannot be applied.
Error: 0xC001F009 at MasterTest: The type of the value being assigned to variable "User::CustomerId" differs from the current variable type. Variables may not change type during execution. Variable types are strict, except for variables of type Object.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 3 to variable "User::CustomerId" cannot be applied.
Warning: 0x80019002 at MasterTest: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED. The Execution method succeeded, but the number of errors raised (12) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "Package.dtsx" finished: Failure.
Dts.TaskResult = Dts.Results.Success
Любая помощь будет оценена