删除 SQL 中的 CONSTRAINT 花费的时间太长

Removing CONSTRAINT in SQL takes too long

我是 运行 下面在 SQL Server 2008 R2 上的查询,以禁用约束以便能够进行一些修改

ALTER TABLE mytable NOCHECK CONSTRAINT UCxxxx

已经 50 分钟了,仍然 运行。

Table 大约有 200 万行...

有什么想法吗?

table 上可能存在架构锁。架构锁旨在阻止其他线程在使用对象时更改对象。

您可以通过检查 sys.dm_tran_locks:

来判断是否属于这种情况
select * from sys.dm_tran_locks 
where resource_associated_entity_id = object_id('YourTable');

我也用过这个查询来找到当前用户的会话然后杀死它...

SELECT DISTINCT
        name AS database_name,
        session_id,
        host_name,
        login_time,
        login_name,
        reads,
        writes
FROM    sys.dm_exec_sessions
        LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
        INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
WHERE   resource_type <> 'DATABASE'
--AND name ='YourDatabaseNameHere'
ORDER BY name

KILL 58 -- Kill process having session_id 86

参考:http://www.connectsql.com/2010/12/sql-server-find-and-kill-specific-user.html