在我们的实时/生产数据库上,我试图将触发器添加到表中,但没有成功。试过几次,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/