RAISERROR
返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。语法
RAISERROR ( { msg_id | msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]参数
msg_id存储于 sysmessages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。msg_str是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,则只能显示前 397 个并将添加一个省略号以表示该信息已被截断。所有特定消息的标准消息 ID 是 14,000。msg_str 支持下面的格式:% [[flag] [width] [precision] [{h | l}]] type可在 msg_str 中使用的参数包括:flag用于确定用户定义的错误信息的间距和对齐的代码。
示例
A. 创建特定消息
下例显示可能出现的两种错误。第一种错误很简单,生成的是静态消息。第二种错误则是在尝试修改的基础上动态生成的。CREATE TRIGGER employee_insupd
ON employee
FOR INSERT, UPDATE
AS
/* Get the range of level for this job type from the jobs table. */
DECLARE @@MIN_LVL tinyint,
@@MAX_LVL tinyint,
@@EMP_LVL tinyint,
@@JOB_ID smallint
SELECT @@MIN_LVl = min_lvl,
@@MAX_LV = max_lvl,
@@ EMP_LVL = i.job_lvl,
@@JOB_ID = i.job_id
FROM employee e, jobs j, inserted i
WHERE e.emp_id = i.emp_id AND i.job_id = j.job_id
IF (@@JOB_ID = 1) and (@@EMP_lVl <> 10)
BEGIN
RAISERROR ('Job id 1 expects the default level of 10.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
IF NOT @@ EMP_LVL BETWEEN @@MIN_LVL AND @@MAX_LVL)
BEGIN
RAISERROR ('The level for job_id:%d should be between %d and %d.',
16, 1, @@JOB_ID, @@MIN_LVL, @@MAX_LVL)
ROLLBACK TRANSACTION
END
返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。语法
RAISERROR ( { msg_id | msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]参数
msg_id存储于 sysmessages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。msg_str是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,则只能显示前 397 个并将添加一个省略号以表示该信息已被截断。所有特定消息的标准消息 ID 是 14,000。msg_str 支持下面的格式:% [[flag] [width] [precision] [{h | l}]] type可在 msg_str 中使用的参数包括:flag用于确定用户定义的错误信息的间距和对齐的代码。
示例
A. 创建特定消息
下例显示可能出现的两种错误。第一种错误很简单,生成的是静态消息。第二种错误则是在尝试修改的基础上动态生成的。CREATE TRIGGER employee_insupd
ON employee
FOR INSERT, UPDATE
AS
/* Get the range of level for this job type from the jobs table. */
DECLARE @@MIN_LVL tinyint,
@@MAX_LVL tinyint,
@@EMP_LVL tinyint,
@@JOB_ID smallint
SELECT @@MIN_LVl = min_lvl,
@@MAX_LV = max_lvl,
@@ EMP_LVL = i.job_lvl,
@@JOB_ID = i.job_id
FROM employee e, jobs j, inserted i
WHERE e.emp_id = i.emp_id AND i.job_id = j.job_id
IF (@@JOB_ID = 1) and (@@EMP_lVl <> 10)
BEGIN
RAISERROR ('Job id 1 expects the default level of 10.', 16, 1)
ROLLBACK TRANSACTION
END
ELSE
IF NOT @@ EMP_LVL BETWEEN @@MIN_LVL AND @@MAX_LVL)
BEGIN
RAISERROR ('The level for job_id:%d should be between %d and %d.',
16, 1, @@JOB_ID, @@MIN_LVL, @@MAX_LVL)
ROLLBACK TRANSACTION
END
解决方案 »
- 安装完sql server2005,由于某些原因需要修改IP地址和计算机名。。
- 一个头痛的数据库项目习题,
- 创建了SQL Server 2005认证登录用户不能访问用户数据库的问题
- 用SQL语句导一对主从表的问题
- 存取过程的作用和意义和基本编写语法
- 写了一个查询语句但是无法执行成功,试了很久都不行。
- 邹建及其它高手,麻烦看看这个问题怎么解决,谢谢!
- 求数据库交叉表
- 谁能告诉我在sql server中 #tablename 和##tablename 的区别,他们何时自动删除,谢谢
- 怎么设置MONEY字段保留2位小数?(默认的是保留4位)
- 进程阻塞怎么办??在分析器里查询无反应
- 怎么将查询结果追加到一个已有记录的表当中???
可以
跟正常的一样。
触发器本身就是以transaction方式运行的,
不必再加transaction
可以错误如何定义并返回(delphi怎么写)?
在delphi里用
try
query1.execSQL;
except
on e: Exception do
begin
showmessage('出错' + e.message);
exit;
end;
end;
showmessage('执行成功')
if @@error<> 0
begin
raiserror('出错信息',16,-1)
rollback
return
end