SQL文でテーブル列でNULLを許容する、しないを変更する方法 - NOT NULL , NULLABLE 設定の変更

テーブルの列の NOT NULL , NULLABLE を変更するSQLを紹介します。

概要

データベースのテーブルの列(カラム)にNULLの値を許容するかを設定することができます。
テーブルの作成後に使用などが変わり、NULLを許容しない設定に変更したい、または、NULLを許容する設定に変更したいことがあります。
データベースのテーブルのカラムのNULLの許容の設定を変更する場合は、ALTER TALBE 文を利用します。

事前準備

NULLを許容する列をNULLを許容しない設定に変更する場合、列の値にNULLが含まれるとエラーになりますので、 NULLのカラムに値を設定してNULLの値を持つカラムがない状態にします。

書式

NULLを許容する列をNULLを許容しない設定に変更する
ALTER TABLE (テーブル名) ALTER COLUMN (変更したい列名) (変更したい列名の型名) NOT NULL;

NULLを許容しない列をNULLを許容する設定に変更する
ALTER TABLE (テーブル名) ALTER COLUMN (変更したい列名) (変更したい列名の型名) NULL;

記述例1

ALTER TABLE products ALTER COLUMN price int NOT NULL;

記述例2

カラムの値がすべてnullになっている場合の例です。先に0で埋めてから、NOT NULLに変更しています。
UPDATE Figure set Width=0;
UPDATE Figure set Height=0;
ALTER TABLE Figure ALTER COLUMN Width int NOT NULL;
ALTER TABLE Figure ALTER COLUMN Height int NOT NULL;

補足

SQL Serverなどで、SQL Management Studio のテーブルのデザインで[NULL を許容]のチェックボックスのチェックをつけたり、外したりする方法で変更した場合、 テーブルの再作成になってしまします。テーブルのサイズが小さい場合はほとんど問題になりませんが、テーブルのサイズが大きい場合、長時間テーブルがロックされたり、 テーブルの再作成に時間がかかりタイムアウトになってしまうことがあります。
大きなテーブルの列のNULLの設定を変更する場合は、テーブルのデザイン変更ではなく、SQL文を実行して処理するほうがおすすめです。大きなサイズのテーブルでも短い時間で実行完了します。

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
掲載日: 2020-08-07
iPentec all rights reserverd.