如何在表达式构建器中使用System :: ErrorDescription系统变量

时间:2017-02-20 10:49:58

标签: ssis ssis-2012 biml

我正在使用BIML创建SSIS包,并且包的一部分处理发生的错误。我正在使用执行SQL任务调用存储过程来记录数据库中的错误详细信息,并且存储过程需要一个参数 @Comments ,其中包含错误描述和一些其他自定义信息。

  

我正在尝试创建变量 Error_Details 并使用表达式为 @Comments param构建值。

<Parameters>
    <Parameter Name="ParentPkgID" DataType="Int32">0</Parameter>
</Parameters>

<Variables>
    <Variable Name="TableName" DataType="String">
        tblEmployee
    </Variable>
    <Variable Name="Error_Details" DataType="String" EvaluateAsExpression="true"> 
        &quot;Package execution failed, Error details :: &quot; + @[System::ErrorDescription]
    </Variable>
</Variables>

问题是当我使用上面的代码创建变量时包创建失败,我理解表达式构建器中没有System :: ErrorDescription,但是我的选项在这里有什么。

  

如何使用某些系统变量,这些变量仅在BIML代码中的某些特定上下文中可用。

非常感谢您查看我的问题。请提出解决方案。

1 个答案:

答案 0 :(得分:5)

这是由于SSIS的限制,如果你尝试在那里使用上面的表达式,SSDT设计师会给你一个类似的错误。

SSIS仅在某些事件处理程序类型的上下文中使System :: ErrorDescription和System :: ErrorCode变量可用,例如OnError。

您可以重新排列程序包以在ExecuteSQL任务上创建事件处理程序,获取其中的错误说明,然后使用事件处理程序中的存储过程调用来处理它。以下是一些将按预期构建的最小示例代码:

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="Package1">
            <Tasks>
                <Dataflow Name="DataflowTask1">
                    <Events>
                        <Event Name="OnError" EventType="OnError">
                            <Variables>
                                <Variable Name="Error_Details" DataType="String" EvaluateAsExpression="true">&quot;Package execution failed, Error details :: &quot; + @[System::ErrorDescription]    </Variable>
                            </Variables>
                        </Event>
                    </Events>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>
</Biml>