SQL Server で列を変更し、デフォルト制約を追加する方法
SQL Server で列を変更し、デフォルト制約を追加する方法
SQL Server で既存のテーブル列を変更し、その列にデフォルト制約を追加することは、よく行われる操作です。この操作は、ALTER TABLE
ステートメントを使用して実行できます。
列の変更
列のデータ型、サイズ、NULL許容性を変更するには、ALTER TABLE
ステートメントの MODIFY
句を使用します。
ALTER TABLE table_name
MODIFY COLUMN column_name data_type [NOT NULL] [DEFAULT default_value];
例:
次の SQL ステートメントは、Customers
テーブルの Age
列のデータ型を INT
から SMALLINT
に変更し、NULL 許容性を NOT NULL
に変更し、デフォルト値を 21 に設定します。
ALTER TABLE Customers
MODIFY COLUMN Age SMALLINT NOT NULL DEFAULT 21;
デフォルト制約の追加
ALTER TABLE table_name
ADD CONSTRAINT constraint_name DEFAULT default_value FOR column_name;
次の SQL ステートメントは、Products
テーブルの Price
列に DEFAULT_PRICE
という名前のデフォルト制約を追加し、その値を 10.00 に設定します。
ALTER TABLE Products
ADD CONSTRAINT DEFAULT_PRICE DEFAULT 10.00 FOR Price;
注意事項
- 列のデータ型を変更する場合は、その列の既存のデータが新しいデータ型と互換性があることを確認する必要があります。
- NULL 許容性を
NOT NULL
に変更する場合は、その列に NULL 値が含まれていないことを確認する必要があります。
上記の説明に加えて、以下の点にも注意する必要があります。
- SQL Server のバージョンによって、
ALTER TABLE
ステートメントの構文が若干異なる場合があります。 - 列を変更したり、デフォルト制約を追加したりする前に、必ずテーブルのバックアップを取るようにしてください。
SQL Server で列を変更し、デフォルト制約を追加するサンプルコード
状況
Age
列はINT
型で、NULL 許容です。FirstName
列はVARCHAR(50)
型で、NULL 許容です。
このテーブルに対して、以下の操作を実行するサンプルコードを示します。
FirstName
列にデフォルト値を 'John' に設定するデフォルト制約を追加します。
コード
-- 列 Age を変更する
ALTER TABLE Customers
MODIFY COLUMN Age SMALLINT NOT NULL DEFAULT 21;
-- 列 FirstName にデフォルト制約を追加する
ALTER TABLE Customers
ADD CONSTRAINT DEFAULT_FIRST_NAME DEFAULT 'John' FOR FirstName;
-- 列 LastName にデフォルト制約を追加する
ALTER TABLE Customers
ADD CONSTRAINT DEFAULT_LAST_NAME DEFAULT 'Doe' FOR LastName;
説明
このコードは以下の処理を実行します。
ALTER TABLE Customers
ステートメントは、Customers
テーブルを変更することを示します。MODIFY COLUMN Age SMALLINT NOT NULL DEFAULT 21
句は、Age
列をSMALLINT
型に変更し、NULL 許容性をNOT NULL
に変更し、デフォルト値を 21 に設定することを示します。ADD CONSTRAINT DEFAULT_FIRST_NAME DEFAULT 'John' FOR FirstName
句は、FirstName
列にDEFAULT_FIRST_NAME
という名前のデフォルト制約を追加し、その値を 'John' に設定することを示します。
このコードはあくまで一例であり、実際の状況に合わせて変更する必要があります。
SQL Server で列を変更し、デフォルト制約を追加するには、いくつかの方法があります。
ALTER TABLE ステートメントを使用する
これは、列を変更し、デフォルト制約を追加する最も一般的な方法です。
-- 列 Age を変更し、デフォルト制約を追加する
ALTER TABLE Customers
MODIFY COLUMN Age SMALLINT NOT NULL DEFAULT 21
ADD CONSTRAINT DEFAULT_FIRST_NAME DEFAULT 'John' FOR FirstName
ADD CONSTRAINT DEFAULT_LAST_NAME DEFAULT 'Doe' FOR LastName;
CREATE TABLE または ALTER TABLE ステートメントと WITH 句を使用する
この方法は、新しい列を追加し、同時にその列にデフォルト制約を設定する場合に役立ちます。
-- 列 Age を変更し、デフォルト制約を追加する
ALTER TABLE Customers
ADD Age SMALLINT NOT NULL DEFAULT 21,
FirstName VARCHAR(50) NOT NULL DEFAULT 'John',
LastName VARCHAR(50) NOT NULL DEFAULT 'Doe';
CHECK 制約を使用する
この方法は、列にデフォルト値を明示的に設定したくない場合に役立ちます。代わりに、CHECK
制約を使用して、列の値が特定の条件を満たしていることを確認できます。
-- 列 Age にチェック制約を追加する
ALTER TABLE Customers
ADD CONSTRAINT CHECK_Age_GE_21 CHECK (Age >= 21);
列の値を更新する
この方法は、既存の列にデフォルト制約を追加するのではなく、列の既存の値をデフォルト値に更新する場合にのみ使用します。
-- 列 Age の値を 21 に更新する
UPDATE Customers
SET Age = 21
WHERE Age IS NULL;
sql-server sql-server-2008 t-sql