|
1 SQL Server的系统变量@@ERROR
在不同的DBMS系统中,提供不同的系统变量名称检查错误信息。SQL Server专用的系统变量为@@ERROR
@@ERROR = 0 表示执行正确。
@@ERROR 0 表示执行错误。
每当完成 一条SQL 语句的执行时,如果语句执行成功,则 @@ERROR 设置为 0。若出现一个错误,则返回一条错误信息。@@ERROR 返回此错误信息代码,直到另一条
T-SQL 语句被执行。您可以在 sysmessages 系统表中查看与 @@ERROR 错误代码相关的文本信息。
由于 @@ERROR 在每一条语句执行后被清除并且重置,应在语句验证后立即检查它,或将其保存到一个局部变量中以备事后查看。
例如,在一个 UPDATE 语句中检测查冲突(错误 #547)。
USE pubs
GO
UPDATE authors
SET au_id = '172 32 1176'
WHERE au_id = "172-32-1176"
IF @@ERROR = 547
print "A check constraint violation occurred"
2. SQL Server错误消息
*当SQL Server运行或T-SQL语句编译、执行过程中遇到错误时,它将显示一条错误消息,向用户报告发生的错误号、错误级别及错误原因等内容。
*错误消息存储在sysmessages系统表中,每条消息由错误消息号、错误严重级别、状态和错误描述信息四部分组成。
*错误描述信息有两类:一类是静态文本,另一类包含了类似C语言printf函数中的格式控制变量,如%d, %c ,%s等。这类错误消息在报告给用户之前,需要用SQL
Server所接收到参数值替换格式控制变量,动态生成完整的错误描述信息。
例1:
SELECT * FROM abc
将产生208号错误,208号错误的描述信息是:
Invalid object name '%.*ls'.
在显示错误信息前,SQL Server将自动用所操作的表名abc替换%.*ls变量,最终向用户发出的错误消息为:Server: Msg 208,
Level 16, State 1, Line 1
Invalid object name 'abc'.
3. 建立用户自定义错误消息
*SQL Server提供了一种添加用户自定义错误消息的机制,使用系统存储过程sp_addmessage将用户自定义的错误消息存放到sysmessage表中。
*用户定义的错误消息号应大于50000。
*可以用RAISERROR语句从sysmessages表中检索信息,并把它发送给相应的用户。
系统存储过程sp_addmessage的语法格式:
sp_addmessage { number, severity, 'msg' }
[, 'language' ]
[, 'with_log' ]
[, 'replace' ]
例2:添加一条错误号为50002的错误消息。
sp_addmessage 50002, 16, 'This is a test%s'
*RAISERROR语句返回用户所定义的错误消息,并且设置系统标识来记录所发生的错误:其语法格式如下:
RAISERROR ( { msg_id | msg_str }
{ ,severity ,state }
[, argument[,...n]] )
[WITH option]
例3:下面语句将产生50002号错误消息,并用字符串"aaa"替换格式控制变量%s:
RAISERROR (50002, 16, -1, "aaa")
4 删除用户定义的错误消息
当用户不再使用所定义的错误消息时,可使用系统存储过程sp_dropmessage删除。sp_dropmessage的格式为:
sp_dropmessage [@msgnum =] message_number
[ , [@lang = ] 'language']
例4:下面语句删除前面所定义的50002号错误消息:
sp_dropmessage 50002
|
|