- 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;
列に変更を加えたら、列で 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]