在以前的版本中,我们在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个消息。
使用自定义消息引发消息的更好方法是什么?
答案 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,'错误和/或业务错误文本在这里')