3

有一个 60 列和 200 行的表。BIT将列从更改NULLNOT NULL,现在运行执行时间超过 3 小时。为什么这需要这么长时间?

这是我正在执行的查询:

ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL

除了创建一个新列,使用旧列中的值更新它,然后删除旧列并重命名新列之外,还有更快的方法吗?

这是在 MS SQL Server 2005 上。

4

2 回答 2

3

ALTER 是否被其他语句持有的元数据共享锁阻塞?任何 ALTER 都需要元数据排他锁,因此将被使用该表的任何其他语句阻塞。

检查Activity Monitor,或查看sys.dm_exec_requests并查看谁在阻止您的 ALTER INDEX。

于 2010-03-17T20:07:37.793 回答
2

它是在 3 小时后仍在运行(当您发布问题时),还是在 3 小时后完成?

如果它仍在运行,则运行 DBCC OPENTRAN:您可能在某处有一个打开的事务,该事务在表上留下了模式锁

或者SELECT * FROM sys.sysprocesses WHERE blocked <> 0给你被屏蔽的东西

于 2010-03-17T20:12:05.670 回答