在阅读所有答案后,简化它。使用了两个输入和两个输出参数。
确保在存储过程中为输出参数分配一些值。
我的存储过程:
CREATE PROCEDURE [dbo].[MyStoredProcedure]
(@InParam1 VARCHAR(20) = NULL,
@InParam2 VARCHAR(20) = '',
@OutParam1 VARCHAR(20) = NULL OUT,
@OutParam2 VARCHAR(20) = NULL OUT)
AS
BEGIN
SET @OutParam1 = 'Whatever you want to return'
SET @OutParam2 = 'Whatever you want to return'
RETURN 0;
END
调用这个存储过程 - 我使用了两个输出参数,所以我们需要在执行存储过程之前声明它们:
DECLARE @OutParam1 VARCHAR(20)
DECLARE @OutParam2 VARCHAR(20)
即使您最终不需要存储过程中的任何变量(例如@Var),也可以使用它,但这将设置输出参数而不返回任何数据,就像它返回一样:
方法1:
DECLARE @Var INT
EXEC @Var = MyStoredProcedure 'InParam1', 'InParam2', @OutParam1 OUT, @OutParam2 OUT
如果你想从你的存储过程中返回一些选择语句,并且想要使用这些值,你可以将它们保存在一个临时表中,或者直接作为一个选择查询。
方法二:
插入到一个临时表中。
@DECLARE @TableTemp TABLE
(
Column1 VARCHAR(20),
Column2 VARCHAR(20)
)
INSERT INTO @TableTemp
EXEC MyStoredProcedure 'InParam1', 'InParam2', @returnParam1 OUT, @returnParam2 OUT
这将设置两个输出参数从MyStoredProcedure
,并插入您从MyStoredProcedure
传递的值作为选择语句。
方法3:
要仅将返回的值用作表数据,我们可以使用以下方法:
EXEC MyStoredProcedure 'InParam1', 'Inparam2', @returnParam1 OUT, @returnParam2 OUT
在以上所有情况下,输出参数始终被设置。