如何在执行 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任务中,我设置了
连接类型:OLE DB
参数映射:变量名:User::@random(我在SSIS中设置了一个User参数:random INT32),方向:ReturnValue,类型:Numeric,参数名: @random
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>
结果
有效
我知道 'Parameter mapping' 中有 3 种类型的参数 - 输入参数、输出参数和 Return 参数。我了解如何使用输入和输出参数。但是当我尝试将参数类型设置为 'Return Parameter' 时,它不起作用。下面是我的 SQL 服务器存储过程。
ALTER Procedure [dbo].[spRandomReturn]
As
Begin
Return Convert(int, rand() * 10)
End
在SSIS执行SQL任务中,我设置了
连接类型:OLE DB
参数映射:变量名:User::@random(我在SSIS中设置了一个User参数:random INT32),方向:ReturnValue,类型:Numeric,参数名: @random
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>
结果
有效