创建 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
在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。
展开**“数据库”,展开 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
在对象资源管理器中,连接到某个数据库引擎实例,再展开该实例。
从**“文件”菜单中,单击“新建查询”**。
将以下示例复制并粘贴到查询窗口中,然后单击**“执行”**。 此示例将创建与上面相同的存储的 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;
[返回页首]