1

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

提前致谢

4

1 回答 1

0

您需要使用 try 块来捕获 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
于 2016-11-25T08:30:39.717 回答