このテーブルには4000万の行があり、クエリには永遠にかかる以外は、以下のようなalterコマンドを実行しようとしています。デフォルト値の何百万行のテーブルを変更
ALTER TABLE [dbo].[ConsumerProduct]
ADD IsPendDefault [bit] NOT NULL DEFAULT ((0))
GO
そこで私は5000の、それが戻ってnullではないに変更するよりも、バッチ40万行のためのすべての列を更新するよりも、nullを変えることを考えました。この
ALTER TABLE [dbo].ConsumerProduct
ADD IsPendDefault [bit] NULL
GO
SET ROWCOUNT 10000
WHILE (1=1)
BEGIN
BEGIN TRANSACTION
UPDATE ConsumerProduct
SET IsPendDefault = 0
WHERE IsPendDefault IS NULL
-- Update 1000 nonupdated rows
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
END
ALTER TABLE [dbo].ConsumerProduct
ALTER COLUMN IsPendDefault [bit] NOT NULL
GO
でも、このようなクエリ
何かが永遠にかかります。列内のデフォルト値を使用してテーブルを変更する方が簡単に簡単ですか?
私は、SQL ServerのEnterpriseエディションではSQL Serverの2012
私はupdate where節でプライマリキーを使用し、バッチで更新します。私は、各バッチを独立したステートメントにし、ループに頼ることはありません。次の100,000種類のステートメントを入手してください。 –