为什么tsql变量在第二次调用时不保持其值?

时间:2012-05-11 16:04:29

标签: sql sql-server tsql

如果在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.为什么会这样?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

在SQL Server中EXEC存储过程时,RETURN_VALUE通常表示成功或失败。 0(零)通常意味着成功。它与SELECT语句的结果不同。因此,您的SP可能SELECT 5但您仍会收到RETURN_VALUE 0,表示SP已正确执行。

答案 2 :(得分:0)

您还可以使用输出变量,尤其是当您要返回的内容不是整数时。