<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    爪哇咖啡館

    我為J狂

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      11 隨筆 :: 2 文章 :: 39 評論 :: 0 Trackbacks

    設計觸發器

    觸發器是一種特殊類型的存儲過程,它不同于我們前面介紹過的存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如UPDATE、 INSERT、 DELETE 這些操作時,SQL Server 就會自動執行觸發器所定義的SQL 語句,從而確保對數據的處理必須符合由這些SQL 語句所定義的規則。
    觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還有其它許多不同的功能:
    (1) 強化約束(Enforce restriction)
    觸發器能夠實現比CHECK 語句更為復雜的約束。
    (2) 跟蹤變化Auditing changes
    觸發器可以偵測數據庫內的操作,從而不允許數據庫中未經許可的指定更新和變化。

    (3) 級聯運行(Cascaded operation)。
    觸發器可以偵測數據庫內的操作,并自動地級聯影響整個數據庫的各項內容。例如,某個表上的觸發器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。
    (4) 存儲過程的調用(Stored procedure invocation)。
    為了響應數據庫更新觸,發器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS( 數據庫管理系統)本身之外進行操作。
    由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定制記錄等一些方面的問題。例如,觸發器能夠找出某一表在數據修改前后狀態發生的差異,并根據這種差異執行一定的處理。此外一個表的同一類型(INSERT、 UPDATE、 DELETE)的多個觸發器能夠對同一種數據操作采取多種不同的處理。
    總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在數據庫設備上,而刪除表和插入表總是位于內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短

    在設計觸發器時,Microsoft® SQL Server™ 2000 提供了兩種選項:

    • 執行 INSTEAD OF 觸發器代替通常的觸發動作。INSTEAD OF 觸發器還可在帶有一個或多個基表的視圖上定義,而在這些視圖上這些觸發器可擴展視圖可支持的更新類型。

    • 在執行了 INSERT、UPDATE 或 DELETE 語句操作之后執行 AFTER 觸發器。指定 AFTER 與指定 FOR 相同,而后者是 SQL Server 早期版本中唯一可使用的選項。AFTER 觸發器只能在表上指定。

    該表比較 AFTER 觸發器和 INSTEAD OF 觸發器的功能。

    功能 AFTER 觸發器 INSTEAD OF 觸發器
    適用范圍 表和視圖
    每個表或視圖含觸發器數量 ()每個觸發動作(UPDATE、DELETE 和 INSERT)含多個觸發器 每個觸發動作(UPDATE、DELETE 和 INSERT)含一個觸發器
    級聯引用 不應用任何限制 在作為級聯引用完整性約束目標的表上限制應用。
    執行 晚于:
    • 約束處理

    • 聲明引用操作

    • inserteddeleted 表的創建

    • 觸發動作
    早于:
    • 約束處理

    代替:

    • 觸發動作

    晚于:

    • inserteddeleted 表的創建
    執行順序 可指定第一個和最后一個執行 不可用
    inserteddeleted 表中引用 textntext image 不允許 允許

    AFTER
      指定觸發器只有在觸發 SQL 語句中指定的所有操作都已成功執行后才激發。所有的引用級聯操作和約束檢查也必須成功完成后,才能執行此觸發器。
      如果僅指定 FOR 關鍵字,則 AFTER 是默認設置。
      不能在視圖上定義 AFTER 觸發器。

    INSTEAD OF
      指定執行觸發器而不是執行觸發 SQL 語句,從而替代觸發語句的操作。
      在表或視圖上,每個 INSERT、UPDATE 或 DELETE 語句最多可以定義一個 INSTEAD OF 觸發器。然而,可以在每個具有 INSTEAD OF 觸發器的視圖上定義視圖。
      INSTEAD OF 觸發器不能在 WITH CHECK OPTION 的可更新視圖上定義。如果向指定了 WITH CHECK OPTION 選項的可更新視圖添加 INSTEAD OF 觸發器,SQL Server 將產生一個錯誤。用戶必須用 ALTER VIEW 刪除該選項后才能定義 INSTEAD OF 觸發器。

    { [DELETE] [,] [INSERT] [,] [UPDATE] }
      是指定在表或視圖上執行哪些數據修改語句時將激活觸發器的關鍵字。必須至少指定一個選項。在觸發器定義中允許使用以任意順序組合的這些關鍵字。如果指定的選項多于一個,需用逗號分隔這些選項。
      對于 INSTEAD OF 觸發器,不允許在具有 ON DELETE 級聯操作引用關系的表上使用 DELETE 選項。同樣,也不允許在具有 ON UPDATE 級聯操作引用關系的表上使用 UPDATE 選項。
    posted on 2007-04-27 16:24 哲藤峰子 閱讀(980) 評論(1)  編輯  收藏

    評論

    # re: SQL server 觸發器類別 2013-03-01 15:39 未來城市
    寫的很好  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲婷婷香蕉久久精品| 又黄又爽的视频免费看| 亚洲av不卡一区二区三区| caoporn成人免费公开| 亚洲JIZZJIZZ中国少妇中文| 美国免费高清一级毛片| 国产一级一片免费播放| 免费看一级高潮毛片| 亚洲欧洲精品成人久久曰影片| 曰批免费视频播放在线看片二 | 亚洲成A人片在线观看无码3D| 亚洲av无码无线在线观看| 永久免费毛片手机版在线看| 韩国亚洲伊人久久综合影院| 亚洲Av无码乱码在线观看性色| 麻豆安全免费网址入口| 在线精品亚洲一区二区三区| 3344在线看片免费| 亚洲日韩国产精品无码av| 黄页网站在线观看免费高清| 亚洲高清毛片一区二区| 亚洲精品无码成人片在线观看| 在线观看免费黄色网址| 亚洲自偷精品视频自拍| 精品剧情v国产在免费线观看| 无遮挡a级毛片免费看| 久久精品国产亚洲夜色AV网站| 日本三级2019在线观看免费| 国产天堂亚洲国产碰碰| 亚洲av永久无码精品秋霞电影影院| 1000部啪啪未满十八勿入免费| 亚洲偷自拍另类图片二区| 亚洲国产综合无码一区二区二三区 | 日韩精品无码免费专区网站| 亚洲成A∨人片在线观看不卡| 日韩免费高清播放器| caoporm超免费公开视频| 91精品国产免费入口| 亚洲国产日韩综合久久精品| 日本亚洲国产一区二区三区| 四虎在线最新永久免费|