日期:2014-05-19  浏览次数:20521 次

用触发器 删除表数据,为什么delete语句删除多笔时,只触发了一笔数据??
用触发器删除表的资料,如果一笔一笔的删除,然后保存的话,触发器运行正常,如果用delete   from   table   删除多笔数据时候,触发器只执行了第一笔,是不是触发器不可以触发器SQL执行的操作啊??

------解决方案--------------------
select @stockno=m1.stockno, @stock=m1.stock, @stockstation=m1.stockstation,
@stockstation=m1.stockstation, @carmodel=m1.carmodel,
@identityno=m1.identityno, @brandno=m1.brandno,
@qty=m1.qty, @price=m1.price from deleted as m1
你这句本身只能取出deleted表中的一条记录呀
------解决方案--------------------
因为一句SQL只会触发一次触发器的.不论你影响了多少行.
所以在你写触发器要考虑到删多行情况下.
你在触发器中用select count(*) from deleted
得到删的是一行还是多行.
再解决怎么执行

------解决方案--------------------
影响多行的SQL操作时,要注意触发器的写法

LZ的删除操作包含多行时,Deleted表中有多行 数据的
lz可以使用deleted表,整个表的考虑你要进行的操作,而不是一条数据,按lz的写法只是取着第一条数据,但触发器只被触发一次,所以运行了这次之后就不运行了,也就是lz描述的结果。

不推荐在触发器中使用游标,那样性能将会急剧下降。
------解决方案--------------------
你的觸發器只取出了一條數據,所以只觸發了一條數據。

雖然游標的效率很低,但是如果你的邏輯比較複雜,那就只能用游標的方式來實現,就像你寫的cursor那麼用。