在我们的实时/生产数据库中,我正在尝试向表添加触发器,但一直未成功.我已经尝试了几次,但创建触发器语句需要30多分钟才能完成,我已经取消了它.
该表通常由几个不同的进程读取/写入.我已经禁用了更新表的计划作业,并且在表上的活动较少时尝试了,但是我无法停止访问表的所有内容.
我不认为create trigger语句本身存在问题.create trigger语句在测试环境中成功且快速,并且在将行插入/更新到表时,触发器可正常工作.虽然当我在测试数据库上创建触发器时,表上没有负载,但它的行数要少得多,这与实时/生产数据库上的不同(100对13,000,000+).
这是我正在尝试运行的create trigger语句
CREATE TRIGGER [OnItem_Updated] ON [Item] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF update(State) BEGIN /* do some stuff including for each row updated call a stored procedure that increments a value in table based on the UserId of the updated row */ END END
在更新行或是否有多行时,是否存在在表上创建触发器的问题?
在SQLServer中,默认情况下会启用触发器.是否可以默认创建禁用的触发器?
还有其他想法吗?
问题可能不在表本身中,而是在必须更新以创建触发器的系统表中.如果您正在进行任何其他类型的DDL作为正常流程的一部分,他们可能会坚持下去.
使用sp_who找出块的来源,然后从那里进行调查.