我编写了一个更新触发器,它执行可能会调用自身的更新(这是我想要的行为)。
不幸的是,触发器不会调用自己,我不明白为什么。此触发器只是更改任何子记录的值(基于父键),然后我希望在更新该子项时,应再次触发该触发器,并更新该子项的任何子记录等,等等。 / p>
我可以手动运行相同的更新,触发器成功完成,子记录按我的预期设置。
我已经运行了EXEC sp_configure'嵌套触发器'并且已经返回
minimum:0,maximum:1,config_value:1,run_value:1,因此似乎打开了递归。
ALTER TRIGGER [dbo].[DataInstance_Trigger]
ON [dbo].[DataInstance]
AFTER UPDATE
AS
BEGIN
UPDATE DataInstance
SET
DataInstance.IsCurrent = i.IsCurrent
FROM DataInstance di
Inner join DataContainer dc on
di.DataContainerId = dc.DataContainerId
Inner join Inserted i on
dc.ParentDataContainerId = i.DataContainerId
WHERE di.IsCurrent != i.IsCurrent
END
答案 0 :(得分:4)
除服务器范围的配置外,您还可以禁用每个数据库的触发器:
ALTER DATABASE databasename SET RECURSIVE_TRIGGERS ON | OFF
或通过数据库属性 - >选项 - >其他 - >递归触发器已启用。
如果检出,请确认您的第一个触发器实际更新了某些内容。我通常使用日志表:
insert into dbo.LogTable (txt) values ('Updated ' +
cast(IsNull(@@ROWCOUNT,-1) as varchar(25)) + ' rows.')
对于调试,您还可以使用print:
print 'Updated ' + cast(IsNull(@@ROWCOUNT,-1) as varchar(25)) + ' rows.'