为什么';tsql变量在第二次调用时是否保持其值?
如果在SSMS中运行exec存储过程命令,它将生成以下脚本:为什么';tsql变量在第二次调用时是否保持其值?,sql,sql-server,tsql,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。这是为什么?在SQL Serv
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。这是为什么?在SQL Server中,当执行存储过程时,返回值通常表示成功或失败。0(零)通常意味着成功。它与
SELECT
语句的结果不同。因此,您的SP可以选择5,但仍然会收到返回值为0,表示SP执行时没有错误。在SQL Server中,当执行存储过程时,返回值通常表示成功或失败。0(零)通常意味着成功。它与SELECT
语句的结果不同。因此,您的SP可以选择5,但仍然会收到返回值为0,表示SP执行时没有错误。您需要更改过程以明确返回您希望捕获的值。正如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;
您需要更改过程以显式返回希望捕获的值。正如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;
您还可以使用输出变量,尤其是当您要返回的内容不是整数时。您也可以使用输出变量,尤其是当您要返回的内容不是整数时。输入存储过程的代码。可能重复输入存储过程的代码。可能重复Ah。因此,我的SP中的最后一条语句是SELECT@var,这就是为什么它显示了我期望的数字,但实际上它并没有返回该数字。它只返回0表示成功。有意思,啊。因此,我的SP中的最后一条语句是SELECT@var,这就是为什么它显示了我期望的数字,但实际上它并没有返回该数字。它只返回0表示成功。有趣,你和巴里是对的。谢谢你和巴里是对的。谢谢