拥有一个包含60列和200行的表。将BIT
列从NULL
更改为NOT NULL
,现在的执行时间超过3小时。为什么这需要这么长时间?
这是我执行的查询:
ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL
是否有更快的方法,除了创建新列,使用旧列中的值更新它,然后删除旧列并重命名新列?
这是在MS SQL Server 2005上。
答案 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
为您提供被阻止的内容