关于mssql 2000 的 行级触发器

来源:互联网 发布:ubuntu怎么创建新用户 编辑:程序博客网 时间:2024/04/30 07:14

最近项目中遇到一个问题,在嵌套insert游标的时候,要求copy insert的数据到一个transaction table

 

发现如果在使用

insert table select * from table1 union select * from table2 的时候,数据库触发器只执行一次 ,也就是说,transaction table中只保存最后一条记录,不会保存2条记录。

查了一下MSDN,mssql 只有表级触发器和库级触发器。似乎这样是做不到类似oracle中的for each row 的效果了

 

仔细想一下,mssql在dml操作后,会生成一个inserted和deleted 临时表,这个表中无论你操作几次数据都会存在。

 

在任何一个查询sql中,都是一个隐式游标,所以要记录数据的时候,使用这2个临时表,就会达到类似行级触发器的效果了。

 

测试insert

    ---插入transaction 表
  INSERT INTO tb_trans_history
  (
   trans_id,
   trans_no,
   trans_type,
   trans_seq,
   trans_pro_id,
   trans_from,
   trans_to,
   create_by,
   create_date
  )(SELECT dbo.Fn_TXN_Id() ,input_id,trans_type,input_seq,input_pro_id,0,input_pro_qty,create_by,create_date FROM INSERTED)