我有一个带有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
我甚至可以使用数组吗?
答案 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]
)