由于活动而无法更新触发器

Cra*_*ein 5 trigger sql-server-2008 sql-server concurrency

尝试向附加到经常使用的表的触发器添加一行

ALTER TRIGGER [dbo].[name_of_trigger] ON [dbo].[name_of_table] AFTER UPDATE
BEGIN

   IF ORIGINAL_LOGIN() in ('username')   RETURN

....somecode

END
Run Code Online (Sandbox Code Playgroud)

陷入僵局,唯一的解决方案似乎是每隔几秒钟重试一次,到目前为止还没有奏效。除了按 F5 并希望它有效之外,还有其他方法可以让我的 if 条件处于何种状态吗?

谢谢,

克雷格

Tho*_*ger 7

当您发出一条ALTER TRIGGER语句时,该进程将尝试获取表对象和触发器对象上的 SCH-M(模式修改)锁。这是一种并发性极低的锁,会导致您遇到的预期阻塞。

有关锁兼容性的图表,请参阅此参考资料。为了参考,这里是直接从该文档链接的图表:

在此处输入图片说明

如您所见,该 SCH-M 锁将发生冲突并导致并发阻塞。

就像任何可能导致中断或被阻止的事情一样,我必须同意上面的评论(来自 David Crowell)。您只需要找到对这些对象几乎没有活动的时间。