60列、200行のテーブルがあります。BIT
列をからに変更NULL
するとNOT NULL
、実行実行時間は3時間以上になります。なぜこれほど時間がかかるのですか?
これは私が実行しているクエリです:
ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL
新しい列を作成し、古い列の値で更新してから、古い列を削除して新しい列の名前を変更する以外に、より高速な方法はありますか?
これはMSSQLServer2005にあります。
60列、200行のテーブルがあります。BIT
列をからに変更NULL
するとNOT NULL
、実行実行時間は3時間以上になります。なぜこれほど時間がかかるのですか?
これは私が実行しているクエリです:
ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL
新しい列を作成し、古い列の値で更新してから、古い列を削除して新しい列の名前を変更する以外に、より高速な方法はありますか?
これはMSSQLServer2005にあります。
ALTERは、他のステートメントによって保持されているメタデータ共有ロックによってブロックされていますか?すべてのALTERにはメタデータ排他ロックが必要であるため、テーブルを使用する他のステートメントによってブロックされます。
Activity Monitorを確認するか、sys.dm_exec_requestsを調べて、ALTERINDEXをブロックしているユーザーを確認してください。
3時間後(質問を投稿している間)はまだ実行されていますか、それとも3時間後に完了しますか?
まだ実行中の場合は、DBCCOPENTRANを実行します。テーブルにスキーマロックを残したトランザクションがどこかに開いている可能性があります。
またはSELECT * FROM sys.sysprocesses WHERE blocked <> 0
、ブロックされたものを提供します