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'。您不需要自定義過程。 –