【发布时间】:2016-11-25 06:09:52
【问题描述】:
我是 SQL Server 的新手。请帮我解决这个问题
RAISERROR('There is a problem in the code',16,1)
RETURN -1
这工作得很好。所以我把它放在一个像这样的通用程序中:
CREATE procedure [dbo].[Raise_Error]
(@ErrorMsg varchar(6000) ,
@ErrorSeverity integer = 16,
@ErrorState integer = 1)
AS
BEGIN
RAISERROR (@ErrorMsg, @ErrorSeverity, @ErrorState)
RETURN -1
END
现在当我从另一个过程调用这个过程时
CREATE PROCEDURE TEST_ORIG
AS
BEGIN
IF NOT EXISTS (SELECT * FROM table where FISCALYEAR='2016')
BEGIN
EXEC utils.dbo.[Raise_error]
@ErrorMsg = 'There are no valid records for processing'
RETURN -1
END
我收到一条错误消息
消息 178,第 15 级,状态 1,第 13 行
在此上下文中不能使用具有返回值的 RETURN 语句
任何人都可以阐明这里发生的事情以及我该如何纠正它?我需要在这里返回-1。
提前致谢
【问题讨论】:
-
与其返回值,不如在调用过程中使用输出变量和消费
-
当您引发错误时,执行将在
RAISE语句处停止。第一个过程中的代码永远不会遇到RETURN语句,因为RAISERROR会停止执行并引发异常。 SQL Server 已经认识到这一点,并告诉您永远不会看到返回值,这是正确的。我建议完全摆脱您的第一个程序,因为它没有增加任何价值:它与开箱即用的RAISERROR完全相同。遇到异常时使用RAISERROR。您不需要自定义过程。
标签: sql-server exception-handling procedure raiserror