关于mssql 2000 的 行级触发器

最近项目中遇到一个问题,在嵌套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)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值