sql >> データベース >  >> RDS >> Sqlserver

SQLServerの大きなテーブルにNOTNULL列を追加するにはどうすればよいですか?

    私は自分の仕事でもこの問題に遭遇しました。そして私の解決策は#2に沿っています。

    手順は次のとおりです(SQL Server 2005を使用しています):

    1)デフォルト値で列をテーブルに追加します:

    ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
    

    2)NOT NULLを追加します NOCHECKによる制約 オプション。 NOCHECK 既存の値を強制しません:

    ALTER TABLE MyTable WITH NOCHECK
    ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
    

    3)テーブルの値を段階的に更新します:

    GO
    UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
    GO 1000
    
    • updateステートメントは、最大3000レコードのみを更新します。これにより、その時点でデータのチャンクを保存できます。テーブルにシーケンス主キーがないため、「MyColumnISNULL」を使用する必要があります。

    • GO 1000 前のステートメントを1000回実行します。これにより、300万レコードが更新されます。さらに必要な場合は、この数を増やすだけです。 SQLServerがUPDATEステートメントに対して0レコードを返すまで実行を継続します。



    1. SQLDiagnosticManagerのあまり知られていない10の機能をご覧ください

    2. PostgreSQLでデータベースへのアクセスを制限する方法

    3. SQLがベン図として結合する

    4. PostgreSQLとMySQLのクロスレプリケーションの概要