在我给自己带来某种与压力有关的心脏病发作之前。
有人知道如何完成看似简单的任务,即设置一个数据流任务的结果集(结果为 0 或 1)并将该值分配给变量。
我已经创建了变量。
结果集来自包含多个元素的 XML 文件。标志(0 或 1)是这些元素之一的结果,因此我还需要知道如何使结果集只是该标志。
如果有人可以提供帮助,我将非常感激。
更新:我最终将结果 (0,1) 读回到 SQL Server 到标志表中。然后使用执行 SQL 脚本将其从 SQL Server 读回变量。不确定这是否是最好的方法,但它似乎已经成功了。
您可以使用数据流脚本组件将数据流列值传输到 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
这与其他答案非常相似,只是有一个记录集目标,然后您需要在控制流中的“For 循环容器”中读取该目标。
您可以用记录集填充对象变量。创建记录集目标:
现在,如果您尝试计算控制流中的对象变量,即使其中只有一个值,也是:
TITLE: Expression Builder
------------------------------
Expression cannot be evaluated.
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%C2%AE%20Visual%20Studio%C2%AE&ProdVer=15.9.28307.2094&EvtSrc=Microsoft.DataTransformationServices.Controls.TaskUIFramework.TaskUIFrameworkSR&EvtID=FailToEvaluateExpression&LinkId=20476
------------------------------
ADDITIONAL INFORMATION:
The data type of variable "User::Variable" is not supported in an expression.
Reading the variable "User::Variable" failed with error code 0xC00470D0.
(Microsoft.DataTransformationServices.Controls)
------------------------------
BUTTONS:
OK
------------------------------
为了解决这个问题,您可以构建一个“For 循环容器”来循环记录集对象变量,请参阅SSIS:我可以在使用 foreach 语句循环遍历记录集时编辑记录集吗? - 堆栈溢出。