1

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

我正在尝试创建一个变量Error_Details并使用表达式来构建@Comments参数的值。

<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 代码中的某些特定上下文中可用的一些系统变量。

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

4

1 回答 1

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>
于 2017-02-20T15:18:17.447 回答