建立 DML 觸發程序
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
本主題說明如何使用 SQL Server Management Studio 和使用 Transact-SQL CREATE TRIGGER 陳述式來建立 Transact-SQL DML 觸發程序。
開始之前
限制事項
如需與建立 DML 觸發程序相關的限制事項清單,請參閱 CREATE TRIGGER (Transact-SQL)。
權限
需要建立觸發程序之資料表或檢視的 ALTER 權限。
如何建立 DML 觸發程序
您可以使用下列其中一項:
使用 SQL Server Management Studio
在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。
依序展開 [資料庫]、
AdventureWorks2022
資料庫、[資料表] 和 Purchasing.PurchaseOrderHeader 資料表。以滑鼠右鍵按一下 [觸發程序],然後選取 [新增觸發程序]。
在 [查詢] 功能表上,按一下 [指定範本參數的值] 。 您也可以按 (Ctrl-Shift-M) 開啟 [指定範本參數的值] 對話方塊。
在 [指定範本參數的值] 對話方塊中,為顯示的參數輸入下列值。
參數 值 作者 您的名字 建立日期 今天的日期 描述 先檢查供應商信用評等,再允許插入含有該供應商的新採購單。 Schema_Name 購買 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
在 [物件總管] 中,連接到資料庫引擎的執行個體,然後展開該執行個體。
在 [檔案] 功能表中,按一下 [新增查詢] 。
複製下列範例並將其貼到查詢視窗中,然後按一下 [執行] 。 此範例會建立與上面相同的預存 DML 觸發程序。
-- Trigger valid for multirow and single row inserts -- and optimal for single row inserts. USE AdventureWorks2022; 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;