適用於:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric 中的 SQL 資料庫
本文說明如何使用 SQL Server Management Studio 或 Transact-SQL CREATE TRIGGER 語句建立 Transact-SQL 數據作語言 (DML) 觸發程式。
本文中的程式代碼範例會使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 Microsoft SQL Server 範例和社群專案 首頁下載。
局限性
如需建立 DML 觸發程式的相關限制清單,請參閱 CREATE TRIGGER。
權限
ALTER需要建立觸發程式之數據表或檢視表的許可權。
如何建立 DML 觸發程式
您可以使用下列其中一個方法:
使用 SQL Server Management Studio
在 [物件總管] 中,連線至資料庫引擎的執行個體,然後展開該執行個體。
依 序展開 [資料庫]、[
AdventureWorks2025資料庫]、[ 數據表] 和 [數據表Purchasing.PurchaseOrderHeader]。以滑鼠右鍵按一下 [觸發程序],然後選取 [新增觸發程序]。
在 [查詢] 功能表上,選取 [指定範本參數的值]。 您也可以按 (Ctrl-Shift-M) 開啟 [指定範本參數的值] 對話方塊。
在 [指定範本參數的值] 對話方塊中,為顯示的參數輸入下列值。
參數 值 Author 您的名字 建立日期 今天的日期 說明 先檢查供應商信用評等,再允許插入含有該供應商的新採購單。 Schema_Name PurchasingTrigger_Name NewPODetail2Table_Name PurchaseOrderDetailData_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 觸發程式。 觸發程式適用於多列和單一數據列插入,而且最適合單一數據列插入。
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;