这个不用写trigger
在insert前面加一个验证就可以了用存储过程写,把错误返还给输出参数  :)--example
Create proc aaaaa
      @a   int,
      @b   varchar(12),
      @c   varchar(20) output
as    if @a or @b  .........      set @c = 'XXXXXX'return
go

解决方案 »

  1.   

    create trigger tr_insert on 表
    for insert
    as
    if exists(select * from inserted where ..--检查规则)
    begin
       raiserror('有不合法的数据,本次插入取消',1,16)
       rollback tran
    end
      

  2.   

    谢谢各位,现在的问题是,设计者并不知道哪些数据是合法的,哪些数据非法的(即便知道也是非常复杂繁琐的),数据的合法性由数据库自动判定,要在insert数据时,错误出现后立刻跟踪致使出错的字段值并显示给用户。
      

  3.   

    这些规则是一些字段取值的合理性判断、约束关系和复杂的外键,在insert时,数据库当然会自动校正新增值的数据一致性。
      

  4.   

    既然"这些规则是一些字段取值的合理性判断、约束关系和复杂的外键,在insert时,数据库当然会自动校正新增值的数据一致性"
    那还用得着写触发器吗? 数据库在校验不合格的时候,就会报错,你只需要在前台程序中用错误处理拦截错误就行啦.
      

  5.   

    to邹建兄:本人用的是Sybase SQL Anywhere数据库,在数据库报错时只能报出一些简单的信息;而且用的是事务处理,所以无法知道到底是那行出了错。我的本意是想在数据库端的insert触发器中在触发错误时捕获到使致数据出错的字段值,不知可否用referencing new as new_name这类方法。