我正在使用SSIS 2012将Excel文件导入数据库。我需要在导入时填充到数据库中的一个字段不能存储在Excel文件中。只有在数据库中创建记录时才能知道进入该字段的值。我使用的特定软件将此字段的最后使用值存储在单独的数据库中。在导入时创建记录时,我需要增加此字段并在新记录中插入新值。我有一个生成此值的T-SQL脚本,但我不太了解SSIS知道如何在导入期间为每一行获取该值。
这是我用来生成我需要的值的脚本:
--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
答案 0 :(得分:2)
我想到的选项是使用Script Component
将名为O_mNoteIndex的列添加到数据流中。您基本上需要使用上面的TSQL代码,并使用OleDB,SqlClient或Odbc来查询Dynamics服务器并生成您的ID。
您需要将列添加到输出缓冲区并指定tsql值。我没有找到我之前的任何探索如何做到这一点,但msdn网站应该让你开始
答案 1 :(得分:0)
我建议你运行上面的脚本并将结果返回到SSIS变量中。然后在计算列转换中添加该变量。假设您需要在加载数据集之前运行该脚本一次。如果你需要按照记录运行它,你需要使用@ billinkc的方法。
或者如果你想避免使用脚本,可以将源数据加载到OLEDB记录集中,然后在For Each循环中使用它,并为循环的每次迭代调用该脚本