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

來源:互聯網
上載者:User

觸發器是類似於儲存程式的資料庫物件,它響應資料庫環境下的某個請求。SQL Sever 2005包含3個觸發器對象:AFTER,資料定義語言 (Data Definition Language) (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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.