码迷,mamicode.com
首页 > 其他好文 > 详细

触发器存在的陷阱

时间:2015-11-17 16:58:15      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

一、触发器是一种特殊的存储过程,不能被显式调用,只能在对表进行insert、update、delete操作时被自动激活。所以触发器可以用来实现对表进行复杂的完整性约束。

二、 Sql Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护,它们存在于内存中而不是数据库中。这两个表的结构总是与被该触发器作用的表的结构相同,触发器执行完成后,与该触发器相关的这两个表也被删除。 

对表的操作

Inserted逻辑表

Deleted逻辑表

增加记录(insert)

存放增加的记录

删除记录(delete)

存放被删除的记录

修改记录(update)

存放更新后的记录

存放更新前的记录

 

 

 

陷阱:update触发器只会被update触发一次,无论更新的记录数是多少

 

Alter TRIGGER dbo.tmp_table1_update ON tmp_table1  
AFTER UPDATE  
AS  
SELECT * INTO #INS FROM INSERTED  
DECLARE @PersonCode VARCHAR(20),@Amount MONEY  
IF UPDATE(Amount)  
BEGIN  
    DECLARE AmountCursor CURSOR FOR  
    SELECT personcode,Amount FROM #INS  
    OPEN AmountCursor  
    FETCH NEXT FROM AmountCursor INTO @PersonCode,@Amount  
    WHILE @@FETCH_STATUS=0  
    BEGIN  
        UPDATE TMP_TABLE2 SET Amount =@Amount WHERE PersonCode=@PersonCode  
        FETCH NEXT FROM AmountCursor INTO @PersonCode,@Amount  
    END  
    CLOSE AmountCursor  
    DEALLOCATE AmountCursor           
END  

 

触发器存在的陷阱

标签:

原文地址:http://www.cnblogs.com/xiangzhong/p/4971862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!