如果在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.为什么会这样?
答案 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)
您还可以使用输出变量,尤其是当您要返回的内容不是整数时。