create trigger tri_tb_insert
on t1
for insert
as
begin
  insert t2 select * from inserted
end
go如上(感谢FlySQL提供),如果 t1出现有重复的数据自动跳过到下一条,能不能做到?

解决方案 »

  1.   

    需求能否再说明细点,用instead of触发器好像可以满足要求。 
      

  2.   

    insert t2 select distinct * from inserted 
    ??
    怎么判断重复,是不是要所有字段比较
      

  3.   

    假设有编号字段ID,还有比较字段col1:
    create trigger tri_tb_insert
    on t1
    for insert
    as
    begin
      insert t2 select * from inserted a where not exists(select 1 from t1 where id<>a.id and col1=a.col1)
    end
    go
      

  4.   

    --不允许t1插入重复,参考:--不允许t1插入重复
    CREATE TRIGGER tr_test ON t1
    INSTEAD OF INSERT
    AS
    SET XACT_ABORT ON 
    BEGIN TRAN
    INSERT t1
    SELECT * 
    FROM INSERTED a 
    EXCEPT 
    SELECT * 
    FROM t1
    INSERT t2
    SELECT * 
    FROM INSERTED a 
    EXCEPT 
    SELECT * 
    FROM t1
    COMMIT
    GO
      

  5.   

    如果所有字段都要比较,那就得 col1=a.col1 and col2=a.col2.... 一列列进行比,没有捷径可走.
    如果没有编号字段将插入t1的记录与t1中已有记录进行区分,则必须使用inseat of 触发器而不能使用for触发器,除非你可以采用到t2表中查找有无相同记录的方法.