我有一个关于如何在SSIS中的执行SQL任务中使用'返回值'参数的问题。我看到'参数映射'中有3种类型的参数 - 输入值,输出值和返回值。我完全理解如何使用输入值和输出值。但是当我尝试设置参数类型是'返回值'时,它无法工作。下面是我的SQL Server存储过程以及我在执行SQL任务中所做的。
ALTER Procedure [dbo].[spRandomReturn]
As
Begin
Return Convert(int, rand() * 10)
End
在SSIS执行SQL任务中,我设置(抱歉我无法上传图像)
参数映射:变量名称:User :: @ random(我在SSIS中设置SSIS用户参数:随机INT32),方向:ReturnValue,类型:数字,参数名称:@random
SQL语句:
Declare @r int = @random EXEC @r = spRandomReturn
我在SSIS中创建了一个返回值,但是它无法正常工作并且总是出错。
答案 0 :(得分:4)
由于您使用的是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
,我们将使用它来捕获Mapping选项卡上的返回值。我将这个初始化为-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>
它有效