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

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

編輯:關於SqlServer

觸發器是類似於存儲程序的數據庫對象,它響應數據庫環境下的某個請求。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數據庫大綱的問題,並且取代數據修改一組標准視圖集。

范例

<b>Listing A</b>
CREATE TABLE Products
(
   ProductID SMALLINT IDENTITY(1,1) PRIMARY KEY,
   Description VARCHAR(75),
   Price MONEY NOT NULL
)
GO
CREATE TABLE Purchases
(
   PurchaseID SMALLINT IDENTITY(1,1) PRIMARY KEY,
   ProductID SMALLINT REFERENCES Products(ProductID),
   PurchasePrice MONEY NOT NULL,
   PurchaseDate SMALLDATETIME DEFAULT(GETDATE())
)

為了更好地說明可更新視圖概念,我們提供一個示例。在本例中,我們設計一個產品表(記錄產品),一個購買表(記錄購買)。Listing A包含了創建表的腳本,運行此腳本後則得到示例中所要用到的表。運行Listing B腳本向表中添加數據。

<b>Listing B</b>
INSERT INTO Products(Description, Price) VALUES('Television',500)
INSERT INTO Products(Description, Price) VALUES('VCR',100)
INSERT INTO Products(Description, Price) VALUES('DVD_Player',125)
INSERT INTO Products(Description, Price) VALUES('Alarm_Clock',40)
INSERT INTO Products(Description, Price) VALUES('Camera',325)
INSERT INTO Products(Description, Price) VALUES('Projector',1500)
INSERT INTO Products(Description, Price) VALUES('XBox',400)
GO
INSERT INTO Purchases(ProductID, PurchasePrice) VALUES(1, 500)
INSERT INTO Purchases(ProductID, PurchasePrice) VALUES(5, 325)
INSERT INTO Purchases(ProductID, PurchasePrice) VALUES(1, 525)
GO

現在表中已經有數據了,我可以為這些表創建一些有意義的視圖。請查看Listing C。

<b>isting C</b>
CREATE VIEW vw_ProductPurchases
AS
   SELECT
      pr.ProductID,
      pr.Description,
      pr.Price AS ProductPrice,
      pu.PurchasePrice,
      pu.PurchaseDate 
   FROM
      Products pr
      INNER JOIN Purchases pu ON pr.ProductID = pu.ProductID
GO

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