建立 DML 觸發程序
此主題描述如何使用 SQL Server Management Studio 以及使用 Transact-SQL CREATE TRIGGER 陳述式來建立 Transact-SQL DML 觸發程序。
開始之前
限制事項
如需與建立 DML 觸發程序相關之限制事項的清單,請參閱<CREATE TRIGGER (Transact-SQL)>。
權限
需要建立觸發程序之資料表或檢視的 ALTER 權限。
如何建立 DML 觸發程序
您可以使用下列其中一項:
SQL Server Management Studio
Transact-SQL
使用 SQL Server Management Studio
在 [物件總管] 中,連接到 Database Engine 的執行個體,然後展開該執行個體。
依序展開 [資料庫]、 AdventureWorks2012 資料庫、[資料表] 和 Purchasing.PurchaseOrderHeader 資料表。
以滑鼠右鍵按一下 [觸發程序],然後選取 [新增觸發程序]。
在 [查詢] 功能表上,按一下 [指定範本參數的值]。 您也可以按 (Ctrl-Shift-M) 開啟 [指定範本參數的值] 對話方塊。
在 [指定範本參數的值] 對話方塊中,為顯示的參數輸入下列值。
參數
值
作者
Your name
建立日期
Today's date
說明
先檢查供應商信用評等,再允許插入含有該供應商的新採購單。
Schema_Name
Purchasing
Trigger_Name
NewPODetail2
Table_Name
PurchaseOrderDetail
Data_Modification_Statement
從清單中移除 UPDATE 和 DELETE。
按一下 [確定]。
在 [查詢編輯器] 中,將 -- Insert statements for trigger here 註解取代為下列陳述式:
IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;
若要驗證語法是否有效,請在 [查詢] 功能表上按一下 [剖析]。 如果傳回錯誤訊息,請比較陳述式與上列資訊,並視需要進行更正,然後重複此步驟。
若要建立 DML 觸發程序,請在 [查詢] 功能表中按一下 [執行]。 DML 觸發程序會建立為資料庫中的物件。
若要查看 [物件總管] 中所列的 DML 觸發程序,請以滑鼠右鍵按一下 [觸發程序],然後選取 [重新整理]。
[回到頁首]
使用 Transact-SQL
在 [物件總管] 中,連接到 Database Engine 的執行個體,然後展開該執行個體。
在 [檔案] 功能表中,按一下 [新增查詢]。
將下列範例複製並貼到查詢視窗中,然後按一下 [執行]。 此範例會建立與上面相同的預存 DML 觸發程序。
-- Trigger valid for multirow and single row inserts -- and optimal for single row inserts. USE AdventureWorks2012; GO CREATE TRIGGER NewPODetail3 ON Purchasing.PurchaseOrderDetail FOR INSERT AS IF @@ROWCOUNT = 1 BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + (SELECT SUM(LineTotal) FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID) WHERE PurchaseOrderHeader.PurchaseOrderID IN (SELECT PurchaseOrderID FROM inserted) END;
[回到頁首]