是否可以在一个表上创建和执行2个触发器

时间:2018-06-12 13:37:43

标签: sql sql-server database sql-server-2008

我试图找到一些解决方法来为一个表上的不同表创建和执行多个触发器。我有2张桌子

  • 人员详情
  • 地址

这个表的设计方式是当用户更新Person的地址时,它会在地址表中创建一条新记录,而不是更新现有的记录,我想在用户更新人员详细信息时将更改插入到auditlog表中或地址。

我能够为人员表创建触发器,但不知道如何通过在Person Table上使用或调用多个触发器来使其工作

以下是Person表更新触发器的代码

 CREATE TRIGGER [dbo].[tr_tblPersonDetail_ForUpdate]
 ON  [dbo].[PersonDetail]
 FOR Update
AS 
BEGIN
Declare @Id int,                          
Declare @OldFirstName varchar(50), @NewFirstName varchar(50)

BEGIN

     Select @Id=personId,@NewFirstName = NewFirstName from Inserted

     select @OldFirstName = NewFirstName from deleted where @id = personId

  if(@OldFirstName <> @NewFirstName )
  Insert into AuditLog values('some value','AfterValue','Before Value')

1 个答案:

答案 0 :(得分:0)

是的,一个表可能有多个触发器。但是,您需要谨慎行事 - 您可能不希望每次更新都触发两个触发器,或者您可能需要按特定顺序执行触发器。

听起来你需要一个INSTEAD OF UPDATE触发器来满足

的要求
  

在地址表中创建新记录,而不是更新现有记录

如果只有在更新特定字段时才需要执行触发器,请使用UPDATED()对其进行测试。

您可以使用sp_settriggerorder来指示应执行哪个触发器以及最后一个触发器。

在您的情况下,我会建议AFTER UPDATE用于任何仅更改此人姓名的操作,然后建议INSTEAD OF UPDATE处理更改地址的情况(也会需要处理名称更改)。

如果您选择继续使用触发器的路径。

相关问题