为什么返回-1不能按预期工作

时间:2016-11-25 06:09:53

标签: sql-server exception-handling procedure raiserror

我是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

我收到错误消息

  

Msg 178,Level 15,State 1,Line 13
  带有返回值的RETURN语句不能在此上下文中使用

任何人都可以对这里发生的事情有所了解,我该如何纠正?我需要在这里返回-1。

提前致谢

1 个答案:

答案 0 :(得分:0)

你需要使用try block来捕获raiseerror

    CREATE PROCEDURE TEST_ORIG
    AS
    BEGIN
      BEGIN TRY   
        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
      END TRY  
      BEGIN CATCH
           SELECT ERROR_MESSAGE()
      END CATCH
    END