3

60列、200行のテーブルがあります。BIT列をからに変更NULLするとNOT NULL、実行実行時間は3時間以上になります。なぜこれほど時間がかかるのですか?

これは私が実行しているクエリです:

ALTER TABLE tbl
ALTER COLUMN col BIT NOT NULL

新しい列を作成し、古い列の値で更新してから、古い列を削除して新しい列の名前を変更する以外に、より高速な方法はありますか?

これはMSSQLServer2005にあります。

4

2 に答える 2

3

ALTERは、他のステートメントによって保持されているメタデータ共有ロックによってブロックされていますか?すべてのALTERにはメタデータ排他ロックが必要であるため、テーブルを使用する他のステートメントによってブロックされます。

Activity Monitorを確認するか、sys.dm_exec_requestsを調べて、ALTERINDEXをブロックしているユーザーを確認してください。

于 2010-03-17T20:07:37.793 に答える
2

3時間後(質問を投稿している間)はまだ実行されていますか、それとも3時間後に完了しますか?

まだ実行中の場合は、DBCCOPENTRANを実行します。テーブルにスキーマロックを残したトランザクションがどこかに開いている可能性があります。

またはSELECT * FROM sys.sysprocesses WHERE blocked <> 0、ブロックされたものを提供します

于 2010-03-17T20:12:05.670 に答える