删除SQL中的约束花费的时间太长

删除SQL中的约束花费的时间太长,sql,database,sql-server-2008-r2,Sql,Database,Sql Server 2008 R2,我正在SQL Server 2008 R2上运行下面的查询,以禁用一个约束,以便能够进行一些修改 ALTER TABLE mytable NOCHECK CONSTRAINT UCxxxx 已经50分钟了,而且还在运行 表中有大约200万行 有什么想法吗?表上可能有一个模式锁。模式锁用于阻止其他线程在使用对象时更改对象 您可以通过检查sys.dm_tran_locks来了解情况: select * from sys.dm_tran_locks where resource_associate

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

ALTER TABLE mytable NOCHECK CONSTRAINT UCxxxx
已经50分钟了,而且还在运行

表中有大约200万行


有什么想法吗?

表上可能有一个模式锁。模式锁用于阻止其他线程在使用对象时更改对象

您可以通过检查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

参考资料:

您使用哪种数据库管理系统?您可能仍然在SMS中打开该表。它正在阻止ALTER执行。尝试关闭所有查询选项卡。几乎可以肯定,有其他东西正在阻止此查询。另一方面,禁用约束应该是只启用元数据的更改,需要检查所有现有数据是否符合