SQLServer中RAISERROR的⽤法详细介绍
SQLServer中RAISERROR的⽤法
rairror的作⽤:rairror是⽤于抛出⼀个错误。[以下资料来源于sqlrver2005的帮助]
其语法如下:
RAISERROR({msg_id|msg_str|@local_variable}
{,verity,state}
[,argument[,...n]]
)
[WITHoption[,...n]]
简要说明⼀下:
第⼀个参数:{msg_id|msg_str|@local_variable}
msg_id:表⽰可以是⼀个es表中定义的消息代号;
使⽤sp_addmessage存储在es⽬录视图中的⽤户定义错误消息号。
⽤户定义错误消息的错误号应当⼤于50000。
msg_str:表⽰也可以是⼀个⽤户定义消息,该错误消息最长可以有2047个字符;
(如果是常量,请使⽤N'xxxx',因为是nvarchar的)
当指定msg_str时,RAISERROR将引发⼀个错误号为5000的错误消息。
@local_variable:表⽰也可以是按照msg_str⽅式的格式化字符串变量。
第⼆个参数:verity
⽤户定义的与该消息关联的严重级别。(这个很重要)
任何⽤户都可以指定0到18之间的严重级别。
[0,10]的闭区间内,不会跳到catch;
如果是[11,19],则跳到catch;
如果[20,⽆穷),则直接终⽌数据库连接;
第三个参数:state
如果在多个位置引发相同的⽤户定义错误,
则针对每个位置使⽤唯⼀的状态号有助于找到引发错误的代码段。
介于1⾄127之间的任意整数。(state默认值为1)
当state值为0或⼤于127时会⽣成错误!
第四个参数:argument
⽤于代替msg_str或对应于msg_id的消息中的定义的变量的参数。
第五个参数:option
错误的⾃定义选项,可以是下表中的任⼀值:
LOG:在错误⽇志和应⽤程序⽇志中记录错误;
NOWAIT:将消息⽴即发送给客户端;
SETERROR:将@@ERROR值和ERROR_NUMBER值设置为msg_id或50000;
[SQL]代码⽰例
--⽰例1
DECLARE@raiErrorCodenvarchar(50)
SET@raiErrorCode=CONVERT(nvarchar(50),YOURUNIQUEIDENTIFIERKEY)
RAISERROR('%snorecordintable',16,1,@raiErrorCode)
--⽰例2
RAISERROR(
N'Thisismessage%s%d.',--Messagetext,
10,--Severity,
1,--State,
N'number',--Firstargument.
5--Secondargument.
);
--Themessagetextreturnedis:Thisismessagenumber5.
GO
--⽰例3
RAISERROR(N'<<%*.*s>>',--Messagetext.
10,--Severity,
1,--State,
7,--Firstargumentudforwidth.
3,--Secondargumentudforprecision.
N'abcde');--Thirdargumentsuppliesthestring.
--Themessagetextreturnedis:<
GO
--⽰例4
RAISERROR(N'<<%7.3s>>',--Messagetext.
10,--Severity,
1,--State,
N'abcde');--Firstargumentsuppliesthestring.
--Themessagetextreturnedis:<
GO
--⽰例5
--A.从CATCH块返回错误消息
以下代码⽰例显⽰如何在TRY块中使⽤RAISERROR使执⾏跳⾄关联的CATCH块中。
它还显⽰如何使⽤RAISERROR返回有关调⽤CATCH块的错误的信息。
BEGINTRY
RAISERROR('ErrorraidinTRYblock.',--Messagetext.
16,--Severity.
1--State.
);
ENDTRY
BEGINCATCH
DECLARE@ErrorMessageNVARCHAR(4000);
DECLARE@ErrorSeverityINT;
DECLARE@ErrorStateINT;
SELECT
@ErrorMessage=ERROR_MESSAGE(),
@ErrorSeverity=ERROR_SEVERITY(),
@ErrorState=ERROR_STATE();
RAISERROR(@ErrorMessage,--Messagetext.
@ErrorSeverity,--Severity.
@ErrorState--State.
);
ENDCATCH;
--⽰例6
--B.在es中创建即席消息
以下⽰例显⽰如何引发es⽬录视图中存储的消息。
该消息通过sp_addmessage系统存储过程,以消息号50005添加到es⽬录视图中。
sp_addmessage@msgnum=50005,
@verity=10,
@msgtext=N'<<%7.3s>>';
GO
RAISERROR(50005,--Messageid.
10,--Severity,
1,--State,
N'abcde');--Firstargumentsuppliesthestring.
--Themessagetextreturnedis:<
GO
sp_dropmessage@msgnum=50005;
GO
--⽰例7
--C.使⽤局部变量提供消息⽂本
以下代码⽰例显⽰如何使⽤局部变量为RAISERROR语句提供消息⽂本。
sp_addmessage@msgnum=50005,
@verity=10,
@msgtext=N'<<%7.3s>>';
GO
RAISERROR(50005,--Messageid.
10,--Severity,
1,--State,
N'abcde');--Firstargumentsuppliesthestring.
--Themessagetextreturnedis:<
GO
sp_dropmessage@msgnum=50005;
GO
感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!
本文发布于:2022-11-26 14:13:03,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/25560.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |