当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《CREATETRIGGER在SQLServer2005上花了30多分钟》经验,为你挑选了1个好方法。

在我们的实时/生产数据库中,我正在尝试向表添加触发器,但一直未成功.我已经尝试了几次,但创建触发器语句需要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中,默认情况下会启用触发器.是否可以默认创建禁用的触发器?

还有其他想法吗?



1> Tom H..:

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

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

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有