程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 如何使用SQL Server 2005 INSTEAD-OF觸發器

如何使用SQL Server 2005 INSTEAD-OF觸發器

編輯:關於PHP編程

  觸發器是類似於存儲程序的數據庫對象,它響應數據庫環境下的某個請求。SQL Sever 2005包含3個觸發器對象:AFTER,數據定義語言 (DDL)和INSTEAD-OF。
  AFTER觸發器是存儲程序,它發生於數據操作語句作用之後,例如刪除語句等。DDL是SQL Server 2005的新觸發器,允許響應數據庫引擎中對象定義水平事件(例如:DROP TABLE語句)。INSTEAD-OF觸發器是對象,在數據庫引擎中可以取代數據操作語句而執行。例如:將INSTEAD-OF INSERT觸發器附加到表,告訴數據庫執行此觸發器。
  使用INSTEAD-OF觸發器的理由
  INSTEAD-OF觸發器是SQL Sever功能強大的對象,允許開發人員轉移數據庫引擎完成不同的工作,以滿足開發要求。其中的一個例子是在數據庫的表中添加INSTEAD-OF觸發器,當不需要修改表時,可以對表的內容進行回滾。使用此方法時,必須格外小心,因為任何指定的表修改之前,INSTEAD-OF觸發器必須處於激活狀態。
  使用INSTEAD-OF觸發器一個更充分理由是視圖處理。在視圖中添加INSTEAD-OF觸發器後,則可創建更新的視圖。可更新視圖允許完整地提取數據庫大綱,因此可以用此方法設計系統,而不需要擔心OLTP數據庫大綱的問題,並且取代數據修改一組標准視圖集。
  范例
  為了更好地說明可更新視圖概念,我們提供一個示例。在本例中,我們設計一個產品表(記錄產品),一個購買表(記錄購買)。Listing A包含了創建表的腳本,運行此腳本後則得到示例中所要用到的表。運行Listing B腳本向表中添加數據。
  現在表中已經有數據了,我可以為這些表創建一些有意義的視圖。請查看Listing C。
  這是個典型的產品水平的視圖。它聯合了數據庫中的兩個表,使得數據簡單化了。但是,對於數據提取,使用視圖則沒有什麼優勢。在視圖上附上INSTEAD-OF觸發器後,則允許修改表,但是我不需要直接修改表中的數據。我使用Listing D中的代碼在vw_ProductPurchases視圖上創建一個INSTEAD-OF觸發器。
  請注意此INSTEAD OF觸發器的聲明。SQL Server創建的默認的觸發器為AFTER觸發器,因此,必須在觸發器定義中指定INSTEAD OF子句。
  觸發器的第一條語句是“check”語句。本例中我使用此語句檢測INSERTED表以確保顯示ProductID字段,並且保證提供顯示其他PurchasePrice 或 ProductPrice字段。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved