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

Tsql 如何在单个存储过程中使用多个输出参数,tsql,stored-procedures,Tsql,Stored Procedures,我有一个SP,其输出参数如下所示: ALTER PROCEDURE[dbo].[SP_Name]@VarName decimal(18,2)输出为 我从vb.net调用该过程以获取计算值。我的问题是:我有8个SP,其结构如下: CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ... CREATE TABLE @TempTable Begin Select ... End SET @VarName = Result

我有一个SP,其输出参数如下所示:
ALTER PROCEDURE[dbo].[SP_Name]@VarName decimal(18,2)输出为

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

CREATE PROCEDURE [dbo].[SP_Name] @VarName decimal(18,2) OUTPUT as ...
CREATE TABLE @TempTable
Begin
Select ...
End
SET @VarName = Result
但诱惑总是一样的。不,我正在寻找一种只使用一个存储过程获取所有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
ir我甚至可以使用数组吗?

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

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个查询的结果,也可以这样做。只需在单个存储过程中执行select查询并从代码中获取
数据集
,就可以使用基于零的索引访问单个表(例如
DataTable1=YourDataSet.Tables[0]

Hi!谢谢你的回答。所以我想我会使用数据集解决方案。我想可能会有一个解决方案,我可以将所有8个值放入一个outputparameter(数组)中,并用如下内容调用它:cmd.Parameters.Add(“@Varname[1]”,SqlDbType.Int)。Direction=ParameterDirection.Output;好的,您可以在单个存储过程中使用一个或多个存储过程并访问它们,但在我看来,返回单个查询并获取它们很容易,而无需声明8个输出参数。