1

我正在使用 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
4

2 回答 2

2

想到的选项是使用 aScript Component将名为 O_mNoteIndex 的列添加到您的数据流中。您基本上需要使用上述 TSQL 代码并使用OleDBSqlClientOdbc来查询 Dynamics 服务器并生成您的 ID。

您需要将该列添加到您的输出缓冲区并分配该 tsql 值。我没有找到任何我以前的答案来探索如何做到这一点,但msdn网站应该让你开始

于 2013-09-10T22:43:01.080 回答
0

我建议您运行上述脚本并将结果返回到 SSIS 变量中。然后将该变量添加到计算列转换中。这是假设您只需要在加载数据集之前运行该脚本一次。如果您需要按记录运行它,则需要使用@billinkc 的方法。

或者,如果您想避免使用脚本,您可以将源数据加载到 OLEDB 记录集中,然后在 For Each 循环中使用它,并为循环的每次迭代调用该脚本

于 2013-09-11T04:33:46.173 回答