0

如果在 SSMS 中运行 exec 存储过程命令,它会生成以下脚本:

USE [MY_DB]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[usr_DailyReportsEmpty]
        @username = N'someuser'

SELECT  'Return value' = @return_value

GO

但是,当我运行脚本时,EXEC 返回 16,SELECT 返回 0。这是为什么呢?

4

3 回答 3

4

您需要更改过程以显式返回您希望捕获的值。正如上面 Barry Kaye 提到的,当您简单地选择一个值来返回结果集时,该过程将返回 0 表示成功,但如果您使用 RETURN 语句,该过程将返回该值。

在下面的示例中,执行第一个过程时将选择 1 作为结果集,但在 @return1 中捕获的值将是 0 表示成功。第二个过程没有结果集,@return2 中捕获的值将是 3。

CREATE PROCEDURE Test1
AS
    SELECT 1;
GO

CREATE PROCEDURE Test2
AS
    RETURN 3;
GO

DECLARE @return1 INT, @return2 INT;
EXEC @return1 = Test1;
EXEC @return2 = Test2;
于 2012-05-11T16:23:32.210 回答
2

在 SQL Server 中,当您EXEC执行存储过程时,RETURN_VALUE 通常表示成功或失败。0(零)通常表示成功。这与SELECT陈述的结果不同。因此,您的 SP 可能为SELECT5,但您仍会收到RETURN_VALUE0 表示 SP 执行没有错误。

于 2012-05-11T16:15:44.533 回答
0

您也可以使用输出变量,特别是如果您想要返回的不是整数。

于 2012-05-11T19:47:57.100 回答