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

解决方案 »

  1.   

    触发器能用transaction吗?
    可以
    跟正常的一样。
      

  2.   

    触发器能用transaction吗?
    触发器本身就是以transaction方式运行的,
    不必再加transaction
      

  3.   

    触发器本身就是以transaction方式运行的,不需要Begin Tran和Commit Tran,只需要在捕捉到错误时RoolBack Tran就可以了.
      

  4.   

    Dephi 在此方面是一个儿童 我也不知道
      

  5.   

    触发器能用transaction吗?
    可以错误如何定义并返回(delphi怎么写)?
    在delphi里用
    try
      query1.execSQL;
    except
      on e: Exception do 
      begin
        showmessage('出错' + e.message);
        exit;
      end;
    end;
    showmessage('执行成功')
      

  6.   

    触发器本身就是事务,出错后直接 
    if @@error<> 0
    begin
    raiserror('出错信息',16,-1)
    rollback 
    return
    end