如何在执行 SQL 任务中使用 'Return Value' 参数

How to use 'Return Value' parameter in Execute SQL task

我知道 'Parameter mapping' 中有 3 种类型的参数 - 输入参数、输出参数和 Return 参数。我了解如何使用输入和输出参数。但是当我尝试将参数类型设置为 'Return Parameter' 时,它不起作用。下面是我的 SQL 服务器存储过程。

ALTER Procedure [dbo].[spRandomReturn]
As 
Begin 
Return Convert(int, rand() * 10)
End

在SSIS执行SQL任务中,我设置了

  1. 连接类型:OLE DB

  2. 参数映射:变量名:User::@random(我在SSIS中设置了一个User参数:random INT32),方向:ReturnValue,类型:Numeric,参数名: @random

  3. SQL 语句:

     Declare @r int = @random EXEC @r = spRandomReturn
    

我在 SSIS 中创建了一个 return 参数,但它不起作用并抛出错误。

由于您使用的是 OLE DB 连接管理器,因此需要使用 ? 来指示参数所在的位置。

因此,您的查询变为

EXECUTE ? = [dbo].[spRandomReturn]

在你的参数映射中,你会

复制

Biml,即商业智能标记语言,描述了商业智能平台。在这里,我们将使用它来描述 ETL。 BIDS Helper,是 Visual Studio/BIDS/SSDT 的免费附加组件,解决了它的许多缺点。具体来说,我们将使用将描述 ETL 的 Biml 文件转换为 SSIS 包的功能。这有一个额外的好处,即为您提供一种机制,使您能够准确地生成我正在描述的解决方案,而不是单击许多繁琐的对话框。

您可以在 XML 的以下位中看到,我创建了一个名为 CM_OLE 的连接,它指向 tempdb 的 localhost\dev2014。您需要修改它以反映您的环境。

我创建了一个名为 so_28419264 的包。这个包包含 2 个变量。一个是 Query,它包含第一位代码。第二个是 ReturnValue,我们将使用它来捕获“映射”选项卡上的 return 值。我将此初始化为 -1,因为提供的存储过程永远不会生成负值。

我添加了两个任务,都执行 SQL 个任务。第二个什么都不做,它只是作为我放置断点的点。第一个执行 SQL 任务是我们调用存储过程并将结果分配给变量的地方

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;" />
    </Connections>
    <Packages>
        <Package ConstraintMode="Linear" Name="so_28419264">
            <Variables>
                <Variable DataType="String" Name="Query">EXECUTE ? = [dbo].[spRandomReturn];</Variable>
                <Variable DataType="Int32" Name="ReturnValue">-1</Variable>
            </Variables>
            <Tasks>
                <ExecuteSQL ConnectionName="CM_OLE" Name="SQL Demonstrate Return Value">
                    <VariableInput VariableName="User.Query" />
                    <Parameters>
                        <Parameter DataType="Int32" VariableName="User.ReturnValue" Name="0" Direction="ReturnValue" />
                    </Parameters>
                </ExecuteSQL>

                <ExecuteSQL ConnectionName="CM_OLE" Name="Put Breakpoint on me">
                    <DirectInput>SELECT 1;</DirectInput>                    
                </ExecuteSQL>                
            </Tasks>
        </Package>
    </Packages>
</Biml>

结果

有效