我试图找到一些解决方法来为一个表上的不同表创建和执行多个触发器。我有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')
答案 0 :(得分:0)
是的,一个表可能有多个触发器。但是,您需要谨慎行事 - 您可能不希望每次更新都触发两个触发器,或者您可能需要按特定顺序执行触发器。
听起来你需要一个INSTEAD OF UPDATE
触发器来满足
在地址表中创建新记录,而不是更新现有记录
如果只有在更新特定字段时才需要执行触发器,请使用UPDATED()
对其进行测试。
您可以使用sp_settriggerorder
来指示应执行哪个触发器以及最后一个触发器。
在您的情况下,我会建议AFTER UPDATE
用于任何仅更改此人姓名的操作,然后建议INSTEAD OF UPDATE
处理更改地址的情况(也会需要处理名称更改)。
如果您选择继续使用触发器的路径。