2013-09-10 3 views
1

Я использую SSIS 2012 для импорта файла Excel в базу данных. Одно из полей, которые мне нужно заполнить в базе данных по импорту, не может быть сохранено в файле Excel. Значение, которое поступает в поле, может быть известно только в момент создания записи в базе данных. Специальное программное обеспечение, которое я использую, сохраняет последнее использованное значение для этого поля в отдельной базе данных. При создании записей при импорте мне нужно увеличить это поле и вставить новое значение в новую запись. У меня есть сценарий T-SQL, который генерирует это значение, но я не знаю достаточно о SSIS, чтобы знать, как получить это значение для каждой строки во время импорта.Расширение строк со значением из заявления T-SQL

Вот скрипт, который я использую для создания значения мне нужно:

--Declare some variables 
DECLARE @I_sCompanyID smallint, 
@O_mNoteIndex numeric(19,5), 
@O_iErrorState int 

--Get the CompanyID 
select @I_sCompanyID = CMPANYID 
from DYNAMICS..SY01500 
where INTERID = DB_Name() 

--Get and increment the next note index 
exec DYNAMICS.[dbo].[smGetNextNoteIndex] @I_sCompanyID, 1, @O_mNoteIndex output, @O_iErrorState output 

--Print the Next Note Index 
SELECT @O_mNoteIndex 

ответ

2

Опция, которая приходит на ум, это использовать Script Component, чтобы добавить столбец с именем O_mNoteIndex в свой поток данных. Вам в основном нужно будет использовать ваш вышеуказанный код TSQL и либо работать с OleDB, SqlClient, либо Odbc, чтобы запросить сервер Dynamics и сгенерировать свой идентификатор.

Вам нужно будет добавить столбец в буфер вывода и назначить значение tsql. Я не нахожу ни одного из моих предыдущих ответов, которые исследуют, как это сделать, но сайт msdn должен вас начать.

+0

Спасибо, у меня есть компонент сценария уже делать др. работа. Я могу добавить это как часть этого. – omatase

0

Предлагаю вам запустить приведенный выше сценарий и вернуть результат в переменную SSIS. Затем добавьте эту переменную в преобразованное преобразование столбца. Это предполагает, что вам нужно просто запустить этот сценарий один раз, прежде чем загружать свой набор данных. Если вам нужно запустить его на запись, вам нужно пройти метод @ billinkc.

Или, если вы хотите, чтобы избежать сценария вы можете загрузить исходные данные в OLEDB записи, а затем использовать это в для каждого цикла и вызвать этот сценарий для каждой итерации цикла

Смежные вопросы