有一个 60 列和 200 行的表。BIT
将列从更改NULL
为NOT NULL
,现在运行执行时间超过 3 小时。为什么这需要这么长时间?
这是我正在执行的查询:
ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL
除了创建一个新列,使用旧列中的值更新它,然后删除旧列并重命名新列之外,还有更快的方法吗?
这是在 MS SQL Server 2005 上。
有一个 60 列和 200 行的表。BIT
将列从更改NULL
为NOT NULL
,现在运行执行时间超过 3 小时。为什么这需要这么长时间?
这是我正在执行的查询:
ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL
除了创建一个新列,使用旧列中的值更新它,然后删除旧列并重命名新列之外,还有更快的方法吗?
这是在 MS SQL Server 2005 上。
ALTER 是否被其他语句持有的元数据共享锁阻塞?任何 ALTER 都需要元数据排他锁,因此将被使用该表的任何其他语句阻塞。
检查Activity Monitor,或查看sys.dm_exec_requests并查看谁在阻止您的 ALTER INDEX。
它是在 3 小时后仍在运行(当您发布问题时),还是在 3 小时后完成?
如果它仍在运行,则运行 DBCC OPENTRAN:您可能在某处有一个打开的事务,该事务在表上留下了模式锁
或者SELECT * FROM sys.sysprocesses WHERE blocked <> 0
给你被屏蔽的东西