1
我是SQL Server的新手。请帮我解决这个问题为什么返回-1不能按预期工作
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,State 1,Line 13
带有返回值的RETURN语句不能用于此上下文中
任何人都可以点亮这里发生的事情,我该如何纠正它?我需要在这里返回-1。
在此先感谢
,而不是返回值,它是很好的使用输出变量和消费调用过程 – User
在当你抛出一个错误,执行停止在'RAISE'语句。你的第一个程序中的代码从不会碰到'RETURN'语句,因为RAISERROR'停止执行并抛出异常。 SQL Server已经认识到这一点,并告诉你永远不会看到返回值,这是正确的。我建议彻底摆脱你的第一个程序,因为它没有增加任何价值:它确实是开箱即用的'RAISERROR'所做的。有异常时使用'RAISERROR'。您不需要自定义过程。 –