您有两种选择可以使这项工作。您可以使用单个结果集,也可以使用OUTPUT参数。您当前未正确使用这两种方法。
输出参数
您的存储过程被定义为具有@OrderCount
方向为的参数OUTPUT
如果您想在SSMS,.NET等工具中使用存储过程,那么看起来就像
DECLARE @orderCount int = 0;
EXECUTE dbo.TestStoredProcSSVariable @orderCount OUTPUT;
SELECT @orderCount As OrderCountVariable;
无需指定即可运行上面的命令,OUTPUT
而是查看@orderCount的值是有效的。从1435变为0。
当您在SSIS中使用“执行SQL任务”时,也是如此。您必须指定该参数在OUTPUT上,并且还必须在“参数映射”选项卡中指定它。
还要指定要映射的变量,并在那里使用OUTPUT方向。在这里,我将结果映射到名为Int32类型的SSIS变量中orderCount
单一结果集
您已经掌握了正确的第一部分-您已将结果集指定为“单行”。
您会注意到我正在使用,EXECUTE dbo.TestStoredProcSSVariable ?
因为您必须指定一个输入值,否则proc调用将中断(至少按照您的定义)。您可能用硬编码代替了?
类似的值0
然后,在“结果集”选项卡上,在这里我将第一列(第零个序数)映射到名为 orderCountb
如果运行提供的存储过程,则orderCountb中将不会获得值。为什么?因为您没有从存储过程调用中返回任何内容。我在的存储过程中添加了最后一条语句
SELECT @OrderCount AS OrderCount;
自己做
您可以使用以下biml探索这两种方法。什么是Biml?商业智能标记语言是BI的操作系统。您之所以关心它,是因为它将允许您将一些XML转换为SSIS包。您需要做的就是下载并安装免费的插件BIDS Helper。
安装BIDS Helper之后,
- 右键单击该项目,然后选择添加新的Biml文件
- 用以下XML替换文件的内容
- 修正第5行中的值。将升级
Data Source
到真实服务器并Provider
与您的SSIS版本保持一致。查看您的屏幕截图,它很可能是SQLNCLI10.1
- 右键单击BimlScript.biml,然后选择“生成SSIS包”
Bimlscript.biml
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<Connection
Name="tempdb"
ConnectionString="Data Source=.\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;"
/>
</Connections>
<Packages>
<Package
Name="dba_114775"
ConstraintMode="Linear"
>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
Name="SQL Make procedure">
<DirectInput>
<![CDATA[IF EXISTS
(
SELECT
*
FROM
sys.procedures AS P
INNER JOIN
sys.schemas AS S
ON S.schema_id = P.schema_id
WHERE
S.name = 'dbo'
AND P.name = 'TestStoredProcSSVariable'
)
BEGIN
DROP PROCEDURE dbo.TestStoredProcSSVariable
END
GO
CREATE PROCEDURE dbo.TestStoredProcSSVariable
(
@OrderCount int OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
SET @OrderCount = 1135;
SELECT @OrderCount AS OrderCount;
END
GO
]]>
</DirectInput>
</ExecuteSQL>
<Container Name="SEQC Result set" ConstraintMode="Linear">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL Make procedure.Output"></Input>
</Inputs>
</PrecedenceConstraints>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
ResultSet="SingleRow"
Name="SQL SingleRow">
<DirectInput>EXECUTE dbo.TestStoredProcSSVariable ?;</DirectInput>
<Results>
<Result VariableName="User.orderCountb" Name="0" />
</Results>
<Parameters>
<Parameter DataType="Int32" VariableName="User.orderCountb" Name="0" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="Execute SQL Task 2">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input
OutputPathName="SQL Placeholder.Output"
EvaluationOperation="ExpressionAndConstraint"
EvaluationValue="Success"
Expression="@[orderCount] < 5" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
</Container>
<Container Name="SEQC Output Parameter" ConstraintMode="Linear">
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SQL Make procedure.Output"></Input>
</Inputs>
</PrecedenceConstraints>
<Tasks>
<ExecuteSQL
ConnectionName="tempdb"
Name="SQL Output parameter">
<DirectInput>EXECUTE dbo.TestStoredProcSSVariable ? OUTPUT;</DirectInput>
<Parameters>
<Parameter
DataType="Int32"
VariableName="User.orderCount"
Name="0"
Direction="Output" />
</Parameters>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
</ExecuteSQL>
<ExecuteSQL ConnectionName="tempdb" Name="Execute SQL Task 2">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input
OutputPathName="SQL Placeholder.Output"
EvaluationOperation="ExpressionAndConstraint"
EvaluationValue="Success"
Expression="@[orderCount] < 5" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
</Container>
<ExecuteSQL ConnectionName="tempdb" Name="SQL Placeholder">
<DirectInput>SELECT 1;</DirectInput>
<PrecedenceConstraints>
<Inputs>
<Input OutputPathName="SEQC Result set.Output" />
<Input OutputPathName="SEQC Output Parameter.Output" />
</Inputs>
</PrecedenceConstraints>
</ExecuteSQL>
</Tasks>
<Variables>
<Variable DataType="Int32" Name="orderCount">-1</Variable>
<Variable DataType="Int32" Name="orderCountb">-1</Variable>
</Variables>
</Package>
</Packages>
</Biml>
享受以下SSIS包
@[User::orderCount]