2010-01-11 74 views
0

我需要从ASP.NET Web应用程序做到这一点:禁用触发器挂起?

Alter Table Contacts Disable Trigger All 
-- Do some stuff 
Alter Table Contacts Enable Trigger All 

在某些情况下,Disable Trigger声明挂起。我应该从哪里开始寻找,找出造成这种情况的原因?如果我重新启动SQL服务器,它将恢复正常运行。

回答

3

从SSMS中查看活动监视器,看看为什么它阻止。或者你可以看看blocking_session_id列是sys.dm_exec_requests

我的猜测:架构更改需要对表进行架构修改锁定。任何操作(如SELECT,UPDATE等)都会在该表上放置一个模式稳定性锁,从而阻塞任何ALTER,直到SELECT完成。因此,禁用触发器ALTER被所有挂起的表访问(SELECT)语句所掩盖。

+0

感谢您指点我正确的方向。我使用SQL Profiler来查看发生了什么,并且你是完全正确的。 FWIW:上面的代码是通过LINQ to SQL IEnumerable循环的。如果我先执行查询并获得结果(使用.ToList),然后遍历列表,则一切正常。 – 2010-01-19 21:14:07