SSIS将结果集从数据流设置为变量

时间:2010-10-13 12:21:59

标签: sql-server-2008 ssis ssms

在我给自己某种压力相关的心脏病发作之前。

有谁知道如何完成看似简单的任务,即设置一个数据流任务的结果集(结果将是0或1)并将该值分配给变量。

我已经创建了变量ok。

结果集来自具有多个元素的XML文件。标志(0或1)是其中一个元素的结果,因此我还需要知道如何将结果集作为该标志。

如果有人可以提供帮助,我真的很感激。

更新:我最终将结果(0,1)读回到SQL Server的标志表中。然后使用Execute SQL脚本将其从SQL Server读取回变量。不确定这是否是完成它的最佳方式,但它似乎已经完成了这个伎俩。

2 个答案:

答案 0 :(得分:10)

您可以使用数据流脚本组件将数据流列值传输到SSIS变量。但是,在使用数据流脚本组件和SSIS变量时,必须遵循某些规则。

SSIS不允许您在处理行的脚本过程中为SSIS变量赋值。但是有执行前和执行后的程序,您可以在其中处理任务。

在Script组件中,将SSIS变量添加到ReadWriteVariables属性中。编辑脚本并在ScriptMain类中声明变量。使用PreExecute过程初始化变量。使用ProcessInputRow过程将输入-buffer列值分配给脚本变量。并且,使用PostExecute任务将脚本变量中的值分配给SSIS变量。

这是一个示例VB脚本组件。它有一个SSIS变量(MyOutVariable),它将获取脚本变量(MyVar)的输出。 MyVar变量从数据流中的MyNumber列获取它的值。

Public Class ScriptMain
    Inherits UserComponent

    Dim MyVar As Integer

    Public Overrides Sub PreExecute()
        MyBase.PreExecute()

        'initialize variable local to data flow
        MyVar = 0

    End Sub

    Public Overrides Sub PostExecute()
        MyBase.PostExecute()

        ' output variable value to SSIS variable
        Me.Variables.MyOutVariable = MyVar

    End Sub

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

        ' logic to get value
        MyVar = Row.MyNumber

    End Sub
End Class

答案 1 :(得分:0)

从SSIS 2012开始,您可以使用表达式任务轻松为变量分配值。我们大多数人都不需要编写脚本来完成设置变量值的看似简单的任务。

例如:如果我有一个名为Today的日期变量,并且我想为其指定一个值,我可以在表达式任务中轻松完成,如下所示。

enter image description here

进一步阅读:MSDN - SSIS Expression Task Documentation

注意: (已接受的答案已过时。)