我是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"
的返回值。看起来您忽略了返回值。如果您可以更改示例以显示您如何使用返回值,则可以帮助我们理解您的问题并提供更好的建议。