当我想使用SQL Server 2008 R2的预定义“CREATE TRIGGER”创建触发器时,我迷路了。你能不能给我一个直接的SQL语句,我可以用来创建一个触发器,并告诉我如何定义AFTER,BEFORE等等?
另外,如何知道行UPDATED / INSERTED / DELETED,并使用它们的列值在触发器内执行操作?
当我想使用SQL Server 2008 R2的预定义“CREATE TRIGGER”创建触发器时,我迷路了。你能不能给我一个直接的SQL语句,我可以用来创建一个触发器,并告诉我如何定义AFTER,BEFORE等等?
另外,如何知道行UPDATED / INSERTED / DELETED,并使用它们的列值在触发器内执行操作?
数据库是面向集合的,触发器也不例外。执行给定操作时该触发器将触发,该操作可能会影响多行。因此,问题 "Say I want to know the Primary Key of that row"
用词不当。可能会插入多行。
SQL Server为名为的AFTER触发器提供了两个特殊表 inserted
和 deleted
表示由操作插入或删除的行,其结构与受影响的表格相同。更新触发器可能会填充两者 inserted
和 deleted
而插入触发器只会填充 inserted
表。
来自评论:
但是电子邮件收件人将根据第二个表中的值来决定,其中外键ID位于第一个表中(具有触发器的表)
这个问题的答案是使用 inserted
table(再次,你必须假设可能有多行)循环遍历行并发送电子邮件。但是,我建议不要将电子邮件逻辑放在触发器中。相反,我建议将该逻辑放在存储过程中并从中发送您的电子邮件。
以供参考: 创建触发器
基本语法是
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
触发器是基于事件的进程,在以某种方式更改表后“触发”。这将是DELETE,UPDATE,INSERT等。 BEFORE和AFTER语法将定义在事件提交之前或之后是否运行触发器。
那是短版本。查看 MSDN。