在创建触发器时,若出错,可以用RAISERROR方法来将错误消息返回至应用程序,使用try catch 来捕获。
CREATE TRIGGER trg ON tb
FOR UPDATE
AS
BEGIN
RAISERROR('错误!不允许删除',16,1)
ROLLBACK
END
在SQL2000中,raiserror必须指定错误级别大于10才能让try捕捉到,
必须是使用 [ raiserror('错误信息', 16, 1) ] 这样的语法才行,而且错误级别必须大于10。
如果既要成功保存,又要返回错误是不可能的,除非用存储过程,通过select语句作为结果集返回操作结果信息
RAISERROR语法:
( { msg_id | msg_str } { , severity , state }[ , argument [ ,...n ] ] )[ WITH option [ ,...n ] ]
参数msg_id
存储于 sys.messages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。
msg_str
是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,则只能显示前 397 个并将添加一个省略号以表示该信息
已被截断。所有特定消息的标准消息 ID 是 14,000。
severity
用户定义的与消息关联的严重级别。用户可以使用从 0 到 18 之间的严重级别。19 到 25 之间的严重级别只能由 sysadmin 固定服务器角色成员使用。若要使用 19 到 25 之间的严重级别,必须选择
WITH LOG 选项。
注意 20 到 25 之间的严重级别被认为是致命的。如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记入错误日志和应用程序日志。
state
从 1 到 127 的任意整数,表示有关错误调用状态的信息。state 的赋值默认为 1。
argument
是用于取代在 msg_str 中定义的变量或取代对应于 msg_id 的消息的参数。可以有 0 或更多的替代参数;然而,替代参数的总数不能超过 20 个。每个替代参数可以是局部变量或这些任意数据类型:
int1、int2、int4、char、varchar、binary 或 varbinary。不支持其它数据类型。
option
错误的自定义选项。option 可以是以下值之一:
值
描述
LOG
将错误记入服务器错误日志和应用程序日志。记入服务器错误日志的错误目前被限定为最多 440 字节。
NOWAIT
将消息立即发送给客户端。
SETERROR
将 @@ERROR 的值设置为 msg_id 或 50000,与严重级别无关。
注释 如果使用 sysmessages 错误并且是使用前面显示的 msg_str 格式创建的消息,则将给所提供的 msg_id 的消息传递提供的参数(argument1、argument2 等等)。
当使用 RAISERROR 创建和返回用户定义的错误信息时,使用 sp_addmessage 添加用户定义的错误信息,使用 sp_dropmessage 删除用户定义的错误信息。
当出现错误时,错误号将放在 @@ERROR 函数中,该函数存储最新生成的错误号。对于严重级别为 1 到 10 的消息,@@ERROR 的默认设置为0。
CREATE TRIGGER trg ON tb
FOR UPDATE
AS
BEGIN
RAISERROR('错误!不允许删除',16,1)
ROLLBACK
END
在SQL2000中,raiserror必须指定错误级别大于10才能让try捕捉到,
必须是使用 [ raiserror('错误信息', 16, 1) ] 这样的语法才行,而且错误级别必须大于10。
如果既要成功保存,又要返回错误是不可能的,除非用存储过程,通过select语句作为结果集返回操作结果信息
RAISERROR语法:
( { msg_id | msg_str } { , severity , state }[ , argument [ ,...n ] ] )[ WITH option [ ,...n ] ]
参数msg_id
存储于 sys.messages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。
msg_str
是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,则只能显示前 397 个并将添加一个省略号以表示该信息
已被截断。所有特定消息的标准消息 ID 是 14,000。
severity
用户定义的与消息关联的严重级别。用户可以使用从 0 到 18 之间的严重级别。19 到 25 之间的严重级别只能由 sysadmin 固定服务器角色成员使用。若要使用 19 到 25 之间的严重级别,必须选择
WITH LOG 选项。
注意 20 到 25 之间的严重级别被认为是致命的。如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记入错误日志和应用程序日志。
state
从 1 到 127 的任意整数,表示有关错误调用状态的信息。state 的赋值默认为 1。
argument
是用于取代在 msg_str 中定义的变量或取代对应于 msg_id 的消息的参数。可以有 0 或更多的替代参数;然而,替代参数的总数不能超过 20 个。每个替代参数可以是局部变量或这些任意数据类型:
int1、int2、int4、char、varchar、binary 或 varbinary。不支持其它数据类型。
option
错误的自定义选项。option 可以是以下值之一:
值
描述
LOG
将错误记入服务器错误日志和应用程序日志。记入服务器错误日志的错误目前被限定为最多 440 字节。
NOWAIT
将消息立即发送给客户端。
SETERROR
将 @@ERROR 的值设置为 msg_id 或 50000,与严重级别无关。
注释 如果使用 sysmessages 错误并且是使用前面显示的 msg_str 格式创建的消息,则将给所提供的 msg_id 的消息传递提供的参数(argument1、argument2 等等)。
当使用 RAISERROR 创建和返回用户定义的错误信息时,使用 sp_addmessage 添加用户定义的错误信息,使用 sp_dropmessage 删除用户定义的错误信息。
当出现错误时,错误号将放在 @@ERROR 函数中,该函数存储最新生成的错误号。对于严重级别为 1 到 10 的消息,@@ERROR 的默认设置为0。