代码之家  ›  专栏  ›  技术社区  ›  Pixelated

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

  •  11
  • Pixelated  · 技术社区  · 15 年前

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

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

    我已经创建了变量OK。

    结果集来自包含多个元素的XML文件。标志(0或1)是这些元素之一的结果,因此我还需要知道如何将结果集设置为仅此标志。

    如果有人能帮忙,我会非常感激的。

    更新:我最终将结果(0,1)读取回一个标志表中的SQL Server。然后使用执行SQL脚本将其从SQL Server读取回变量。不确定这是不是最好的方法,但它似乎做到了。

    2 回复  |  直到 10 年前
        1
  •  10
  •   bobs    15 年前

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

    SSIS不允许您在处理行的脚本过程中将值赋给SSIS变量。但是有执行前和执行后的过程,您可以在其中处理分配。

    在脚本组件中,将ssis变量添加到readwritevariables属性。编辑脚本并在scriptmain类中声明一个变量。使用preexecute过程初始化变量。使用processInputRow过程将输入缓冲区列值分配给脚本变量。并且,使用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
    
        2
  •  0
  •   Shiva    10 年前

    从ssis 2012开始,您可以使用 表达式任务轻松地为变量赋值。不需要编写脚本——这是我们大多数人都担心的,因为要完成一项看似简单的任务,即设置变量的值。

    例如:如果我有一个名为 today的日期变量,并且我想给它赋值,我可以很容易地在 表达式任务中这样做,如下所示。

    进一步阅读: msdn-ssis expression task documentation

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

    我想我们大多数人都很谨慎,因为完成了一个看似简单的设定变量值的任务。

    如果我有一个日期变量 Today 我想给它赋值,我可以在 表达式任务 如下所示。

    enter image description here

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

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

    推荐文章