在SQL Server中创建触发器

joh*_*dad 12 sql sql-server triggers

当我想使用SQL Server 2008 R2的预定义"CREATE TRIGGER"创建触发器时,我迷路了.你能给我一个直接的SQL语句,我可以用来创建一个触发器,并告诉我如何定义AFTER,BEFORE等等吗?

另外,如何知道行UPDATED/INSERTED/DELETED,并使用它们的列值在触发器内执行操作?

mrd*_*nny 11

基本语法是

CREATE TRIGGER YourTriggerName ON dbo.YourTable
FOR|AFTER INSERT, UPDATE, DELETE
AS
BEGIN
     /*Put what ever you want here*/
     UPDATE AnotherTable
          SET SomeColumn = AnotherColumn
     FROM inserted | deleted
END
GO
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 3

数据库是面向集合的,触发器也不例外。当执行给定操作并且该操作可能影响多行时,触发器将触发。因此,这个问题"Say I want to know the Primary Key of that row"是用词不当。可以插入多行。

SQL Server 为 AFTER 触发器提供了两个名为inserted和 的特殊表deleted,它们表示由操作插入或删除的行,其结构与受影响的表相同。更新触发器可能会填充两者inserteddeleted而插入触发器只会填充inserted表。

来自评论:

但电子邮件收件人将根据第二个表中的值来决定,其中外键 ID 位于第一个表中(即带有触发器的表)

这个问题的答案是使用表inserted(同样,您必须假设可以有多行)循环浏览行并发送电子邮件。但是,我建议不要将电子邮件逻辑放入触发器中。相反,我建议将该逻辑放入存储过程中并从中发送电子邮件。

仅供参考:创建触发器