zoukankan      html  css  js  c++  java
  • 触发器存在的陷阱

    一、触发器是一种特殊的存储过程,不能被显式调用,只能在对表进行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  
  • 相关阅读:
    java 命令
    测试事件响应修改界面内容
    ASP.NET MVC 解决账号重复登录问题
    Redis 安装
    js返回页面顶部
    Brackets 前端编辑器推荐
    一点点............
    响应式——em,rem,px
    新知识——响应式
    面试心得
  • 原文地址:https://www.cnblogs.com/xiangzhong/p/4971862.html
Copyright © 2011-2022 走看看