如何在单个存储过程中使用多个输出参数

时间:2013-10-14 08:04:03

标签: tsql stored-procedures

我有一个带有Output参数的SP,如下所示: ALTER PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...

我从vb.net调用该过程来获取计算值。我的问题是:我有8个SP,具有以下结构:

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...
CREATE TABLE @TempTable
Begin
Select ...
End
SET @VarName = Result

但TempTable总是一样的。不,我正在寻找一种只用一个存储过程获取所有8个值的方法。我的想法:

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...
CREATE TABLE @TempTable
---Get first value
Begin
Select ...
End
SET @VarName1 = Result
---Get second value
Begin
Select ...
End
SET @VarName2 = Result
...

我如何重写这一行:ALTER PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT我甚至可以使用数组吗?

1 个答案:

答案 0 :(得分:1)

您可以使用单个存储过程来处理所有查询。以下将返回包含八个字段的单行结果集,您可以使用特定的字段名称或索引从代码中获取它们。

CREATE PROCEDURE [dbo].[SP_Name] 
  @VarName decimal(18,2) 
AS

BEGIN
    DECLARE @VarName1 Datatype, @VarName2 Datatype, ...@VarName8 Datatype

    SELECT @VarName1 = yourCol
    FROM --First query

    SELECT @VarName2 = yourCol
    FROM --Second query
    ...

    SELECT @VarName8 = yourCol
    FROM --Eighth query

    --Finally Select all the variables
    SELECT @VarName1 Col1, @VarName2 Col2, ...,@VarName8 Col8
END

或者,如果您要返回所有8个查询的结果,那也是可能的。只需在单个存储过程中执行选择查询,然后从代码中获取DATASET,即可使用基于零的索引(ex DataTable1 = YourDataSet.Tables[0]

访问单个表