SQL Server中的RaiseError

Cam*_*llo 13 t-sql sql-server raiserror

在以前的版本中,我们在t-sql中引发了错误:

RAISERROR 50000 'My Error Message'
Run Code Online (Sandbox Code Playgroud)

在最新的SQL Server中,此语法已停止使用,并替换为RaiseError()语法.

我想有一个提出错误的通用方法,到目前为止我能得到的最好的方法是:

sp_addmessage @msgnum = 50001,
              @severity = 10,
              @msgtext = N'My Error Message', @replace = 'REPLACE';
RAISERROR (50001, 10, 1, 'This error message is not displayed')
Run Code Online (Sandbox Code Playgroud)

但我不能为每条消息创建一个带有sp_addmessage的错误消息,因为有1000个消息.

使用自定义消息引发消息的更好方法是什么?

Cam*_*llo 19

这似乎有效:

RAISERROR('My Error Message',0,1)
Run Code Online (Sandbox Code Playgroud)

  • 请记住,sev 0表示信息消息,而不是错误. (8认同)

Mar*_*rkD 18

实际上,自SQL Server 2012以来RAISERROR已经被弃用了THROW.请访问此处获取更多信息.其中一个更有趣的方面是Rais e rror而不是Rais eE rror导致它在某些圈子中被称为"提升ror".

BOL的样本:

USE tempdb;
GO
CREATE TABLE dbo.TestRethrow
(    ID INT PRIMARY KEY
);
BEGIN TRY
    INSERT dbo.TestRethrow(ID) VALUES(1);
--  Force error 2627, Violation of PRIMARY KEY constraint to be raised.
    INSERT dbo.TestRethrow(ID) VALUES(1);
END TRY
BEGIN CATCH

    PRINT 'In catch block.';
    THROW;
END CATCH;
Run Code Online (Sandbox Code Playgroud)