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

SQLServerで列をNullからNotNullに変更する方法

    • NOTNULL列のデータの制限を理解する
      • 既存の列データの無効化
    • 列のデータ構造を変更する
      • 変更されたNullabilityを確認する

    SQLServerの列のデータ構造をNULLから変更する NOT NULLへ 、それによってその列のnull以外の値を禁止することは、通常、比較的単純な ALTER TABLEを使用して実行されます。 問題の列を適切に変更するための構文。

    このチュートリアルでは、既存を変更する際に必要な重要な安全上の注意事項を確認します。 ALTERを実際に発行する前の列のデータ テーブル自体に害を及ぼす可能性のあるコマンド。

    NOTNULL列のデータの制限を理解する

    テーブルに変更を加える前に、 NOT NULL に変更する既存の列内で指定できる(および指定できない)データを簡単に確認することが重要です。 、行に NULLを含めることができないようにする その列の値。

    最も重要なのは、既存のすべての NULL 列内の値は必須 ALTERの前にnull以外の値に更新されます コマンドを正常に使用でき、列が NOT NULLになります 。列をNOTNULLに設定しようとする試み 実際のNULL 列にデータが残っているとエラーが発生し、変更は発生しません。

    既存の列データの無効化

    NULLがないことを確認するには 列の値には、基本的な UPDATEを使用します コマンド。値が現在NULLである行に明示的に適用できます。 。たとえば、 clientの基本的なテーブルがあります nameのデータ 、 email 、および phone 。現在、いくつかのレコードには NULLがあります 電話 許可したくない値:

    clientsID     name              email                                         phone
    1             Neville Estes     [email protected]                         1-843-863-2697
    2             Flynn Fry         [email protected]
    3             Wyatt Schmidt     [email protected]                          1-950-895-1847
    4             Oleg Hill         [email protected]        1-173-344-1578
    5             Randall Bullock   [email protected]
    6             Lamar White       [email protected]                              1-421-757-4907
    7             Fuller Hill       [email protected]                        1-178-437-8281
    8             Ulysses Boyle     [email protected]   1-535-515-1494
    9             Paki Palmer       [email protected]
    10            Kamal Buchanan    [email protected]           1-325-847-4838
    

    したがって、すべての phoneにデフォルト値を挿入できます。 現在NULLである値 次のステートメントで:

    UPDATE
      clients
    SET
      phone = '0-000-000-0000'
    WHERE
      phone IS NULL;
    

    今、私たちの NULL 値はすべて、 defaultと見なされる値に置き換えられました 、 0-000-000-0000

    clientsID   name            email                                       phone
    1           Neville Estes   [email protected]                       1-843-863-2697
    2           Flynn Fry       [email protected]                          0-000-000-0000
    3           Wyatt Schmidt   [email protected]                        1-950-895-1847
    4           Oleg Hill       [email protected]      1-173-344-1578
    5           Randall Bullock [email protected]                                0-000-000-0000
    6           Lamar White     [email protected]                            1-421-757-4907
    7           Fuller Hill     [email protected]                      1-178-437-8281
    8           Ulysses Boyle   [email protected] 1-535-515-1494
    9           Paki Palmer     [email protected]                             0-000-000-0000
    10          Kamal Buchanan  [email protected]         1-325-847-4838
    
    列のデータ構造を変更する

    NULLがなくなったので 値がなくなったら、 ALTERを発行できます 今後のすべての追加でNULLが許可されないように、列を更新するステートメント 値。 phoneを変更しているので この例の列では、ステートメントは次のようになります。

    ALTER TABLE
      clients
    ALTER COLUMN
      phone
        NVARCHAR(20) NOT NULL;
    
    変更されたNullabilityを確認する

    列に変更を加えたら、列で NULLが許可されていないことを確認することをお勧めします。 単純なINSERTを実行することによる値 テストして、 NULLを使用して新しいレコードを挿入しようとしています 変更された列の値:

    INSERT INTO
      clients(name, email, phone)
    VALUES
      ('John Doe', '[email protected]', NULL);
    

    すべてが計画どおりに進んだ場合、SQLServerは列がNULLを許可しないことを示すエラーを発行します 値:

    Cannot insert the value NULL into column 'phone', table 'library.dbo.clients'; column does not allow nulls. INSERT fails. [SQL State=23000, DB Errorcode=515]
    

    1. データプロファイリング:データ詳細の検出

    2. CASEおよびINによる更新-Oracle

    3. utf8とlatin1の違い

    4. SQLServerの監視でアラートの過負荷を防ぐための4つの方法