ALTER COLUMN的执行时间

时间:2010-03-17 20:04:34

标签: sql sql-server-2005 alter-table

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

这是我执行的查询:

ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL

是否有更快的方法,除了创建新列,使用旧列中的值更新它,然后删除旧列并重命名新列?

这是在MS SQL Server 2005上。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

3小时后(发布问题时)是否仍在运行,或3小时后完成?

如果它仍在运行,请运行DBCC OPENTRAN:你可能是某个已经在表上留下模式锁的开放事务

SELECT * FROM sys.sysprocesses WHERE blocked <> 0为您提供被阻止的内容