如何在RAISERROR中处理不同的消息?

时间:2017-07-10 11:16:38

标签: sql sql-server tsql sql-server-2014

我必须在不同位置使用不同的消息进行RAISERRORS。

Begin Try
      if(Convert(time,@OpeningTime) < convert(time,@ExpiryTime))
      Begin;
            Raiserror('Opening time cannot be smaller than expiry time', 16,10);

      End


          Declare @Days int
          Set @Days= (Select Days from Days where IsActive=1)

          declare @Message varchar(100)
          Set @Message= 'The difference between current date and expiry date must be equal or greater than '+ Convert(varchar,@Days)

          if(datediff(dd, @ExpiryDate, GETDATE()) > @Days)
          Begin
                Raiserror(@Message, 16,10);

          End

End Try

Begin Catch
       Raiserror('Opening time cannot be smaller than expiry time', 16,10);
End Catch

现在的问题是,在每种情况下我都必须在catch块中返回不同的消息,而不是静态文本,例如它应该显示我已经提出的错误

2 个答案:

答案 0 :(得分:1)

使用ERROR_MESSAGE()功能

https://docs.microsoft.com/en-us/sql/t-sql/functions/error-message-transact-sql

结果:

Begin Catch
       Raiserror(ERROR_MESSAGE(), 16,10);
End Catch

答案 1 :(得分:1)

只需在catch块中使用THROW;重新抛出引发的错误:

BEGIN CATCH
    THROW;
END CATCH;