存储过程的默认返回值



我是SQL Server的新手。目前我正在处理现有的源代码,并且我对存储过程有一些不清楚的地方

例如:

My_Stored_Procedure_1

CREATE PROC [dbo].[My_Stored_Procedure_1]
    @ID INT,
    @DATE DATETIME
AS
BEGIN
    UPDATE query...
    PRINT 'ID is ' + CAST(@ID AS VARCHAR(10))
END

My_Stored_Procedure_2

CREATE PROC [dbo].[My_Stored_Procedure_2]
   @RESULT INT
AS
BEGIN
   EXEC @RESULT = My_Stored_Procedure_1 // Unclear point
END

我的问题是,我没有看到My_Stored_Procedure_1的任何返回值,那么@RESULT变量将返回什么?也许是已执行存储过程的默认返回值?

谢谢。

@Result将具有在执行存储过程My_Stored_Procedure_2时传递的默认值。

语句EXEC @RESULT = My_Stored_Procedure_1将错误地执行并终止My_Stored_Procedure_2的执行,因为您在调用 this 时没有将两个输入参数传递给 My_Stored_Procedure_1 sp。

存储过程的默认值取决于该过程中的语句是否成功执行。例如,如果UPDATE语句由于约束错误而失败,则@RESULT将设置为 -6 。如果它成功运行且没有错误,则通常会0 。请参阅以下内容:

CREATE TABLE #testTable (Value INT, CHECK (Value > 5));
INSERT #testTable VALUES (6);
GO
CREATE PROCEDURE #testProc AS
UPDATE #testTable SET Value = 2;
GO
DECLARE @ret INT;
EXEC @ret = #testProc;
PRINT @ret; -- “-6”
DROP PROCEDURE #testProc;
DROP TABLE #testTable;
GO

请注意,您永远不会尝试观察 @RESULT 的值。由于@RESULT不是OUTPUT参数,因此"dbo"."My_Stored_Procedure_2"的调用方将看不到"dbo"."My_Stored_Procedure_1"的返回值。看起来您忽略了返回值。如果您可以更改示例以显示您如何使用返回值,则可以帮助我们理解您的问题并提供更好的建议。

最新更新