【问题标题】:Augmenting Rows With Value From T-SQL Statement使用 T-SQL 语句中的值扩充行
【发布时间】:2013-09-10 22:27:38
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server tsql ssis


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我有一个脚本组件已经在做其他工作了。我可以将其添加为其中的一部分。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 2010-09-21
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多