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  
  • 相关阅读:
    re
    response.xpath
    response.css
    mongovue无法显示collection的问题
    window下安装scrapy
    openCV 图片的处理
    sql server 日期时间操作
    怎样在visual studio 2005 让客户端的recv函数不阻塞
    c# winform 程序用126邮箱发邮件
    MiniDump类笔记
  • 原文地址:https://www.cnblogs.com/xiangzhong/p/4971862.html
Copyright © 2011-2022 走看看