CREATE TRIGGER在SQL Server 2005上花了30多分钟

Ada*_*rad 2 sql sql-server triggers

在我们的实时/生产数据库中,我正在尝试向表添加触发器,但一直未成功.我已经尝试了几次,但创建触发器语句需要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
Run Code Online (Sandbox Code Playgroud)

在更新行或是否有多行时,是否存在在表上创建触发器的问题?

在SQLServer中,默认情况下会启用触发器.是否可以默认创建禁用的触发器?

还有其他想法吗?

Tom*_*m H 6

问题可能不在表本身中,而是在必须更新以创建触发器的系统表中.如果您正在进行任何其他类型的DDL作为正常流程的一部分,他们可能会坚持下去.

使用sp_who找出块的来源,然后从那里进行调查.