sql - CREATE TRIGGER 在 SQL Server 2005 上花费的时间超过 30 分钟

标签 sql sql-server triggers

在我们的实时/生产数据库上,我试图将触发器添加到表中,但没有成功。试过几次,create trigger 语句用了30多分钟才完成,我取消了。

该表经常被几个不同的进程读取/写入。我已禁用更新表的计划作业,并在表上的事件较少时尝试,但我无法停止访问表的所有内容。

我认为创建触发器语句本身没有问题。创建触发器语句在测试环境中成功且快速,并且在将行插入/更新到表时触发器正常工作。虽然当我在测试数据库上创建触发器时,表上没有负载并且行数少得多,这与实时/生产数据库不同(100 对 13,000,000+)。

这是我要运行的创建触发器语句

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 找出 block 的来源,然后从那里进行调查。

关于sql - CREATE TRIGGER 在 SQL Server 2005 上花费的时间超过 30 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/230642/

相关文章:

mysql - 插入触发 SQL。插入新表后如何从另一个表中检索值

postgresql - 在 hsqldb 上运行触发的 postgresql 函数

c# - 在 CreatedBy/ModifiedBy 等 sql 审计列中存储 UserId 而不是 Username 的优势

sql - 如何在 PostgreSQL 中对二维 int 数组进行排序?

sql - 如何在垂直设计的表格上实现搜索?

mysql - 从 DATETIME 字段中选择最常见的月份

SQL 最大参数

sql-server - 在 SQL Server 数据仓库上创建外部表时避免名称冲突

php - 从数据库表1中选择数据并将其插入到php中的另一个数据库表2中

python - pypyodbc 不提交