SQL Server中的Raiserror

时间:2013-04-11 08:59:55

标签: sql-server tsql raiserror

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

RAISERROR 50000 'My Error Message'

在最新的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')

但我无法为每条消息创建一个带有sp_addmessage的错误消息,因为有1000个消息。

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

4 个答案:

答案 0 :(得分:19)

这似乎有效:

RAISERROR('My Error Message',0,1)

答案 1 :(得分:18)

实际上,自SQL Server 2012以来,RAISERROR已弃用THROW。有关详细信息,请转到here。其中一个更有趣的方面是它是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;

答案 2 :(得分:1)

或者使用升高错误的状态属性

第1步:进行中

RAISERROR(“错误:bla bla业务检查1失败”,16,5)

RAISERROR(“错误:bla bla业务检查1失败”,16,6)

5 =状态。可以使用1到255。系统使用1。 除1以外的任何内容都需要自定义处理

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15 州 是介于0到255之间的整数。负值默认为1。不应使用大于255的值。

步骤b)在c#中使用catch(sqlException e) e.state可用于检查

以上为我工作。多亏了不同地方的文章

答案 3 :(得分:0)

- 使用s%外卡,以便您可以从任何存储过程传入​​任何您喜欢的消息:
if Not Exists (Select * from SysMessages where error = 62000) EXEC sp_addmessage @msgnum = 62000, @severity = 16, @msgtext = N'%s', @lang = 'us_english'

- 然后在你的sp中你可以提出这个错误:
    RAISERROR(62000,16,1,'错误和/或业务错误文本在这里')