SQL Serverで列の追加時に名前付きデフォルト制約を作成する方法:その他の方法
SQL Serverで列の追加時に名前付きデフォルト制約を作成できるか?
しかし、2つの方法で実現することは可能です。
列の追加と制約の作成を別々のステートメントで行う
-- 列を追加
ALTER TABLE table_name
ADD column_name data_type DEFAULT value;
-- デフォルト制約を作成
ALTER TABLE table_name
ADD CONSTRAINT constraint_name DEFAULT value FOR column_name;
ALTER COLUMN ステートメントを使用する
ALTER TABLE table_name
ALTER COLUMN column_name
SET DEFAULT value
CONSTRAINT constraint_name;
補足
- デフォルト制約の名前は、任意で指定できます。
- 既存の列にデフォルト値を追加する場合、
SET DEFAULT
オプションを使用します。 - 列にデフォルト値を指定すると、新しいレコードが挿入される際、その値が自動的に割り当てられます。
例
次の例では、Customers
テーブルに Age
という列を追加し、その列にデフォルト値を 21 に設定します。また、その列に DEFAULT_Age
という名前のデフォルト制約を作成します。
ALTER TABLE Customers
ADD Age INT DEFAULT 21
CONSTRAINT DEFAULT_Age;
-- 列を追加
ALTER TABLE Customers
ADD Age INT DEFAULT 21;
-- デフォルト制約を作成
ALTER TABLE Customers
ADD CONSTRAINT DEFAULT_Age DEFAULT 21 FOR Age;
ALTER TABLE Customers
ALTER COLUMN Age
SET DEFAULT 21
CONSTRAINT DEFAULT_Age;
説明
- 上記のコードは、
Customers
テーブルにAge
という名前の列を追加します。 - この列のデータ型は
INT
で、デフォルト値は 21 です。 - また、この列には
DEFAULT_Age
という名前のデフォルト制約が作成されます。
SQL Serverで列の追加時に名前付きデフォルト制約を作成するその他の方法
これは最も基本的な方法です。まず、列を追加する ALTER TABLE
ステートメントを実行し、次にその列にデフォルト制約を作成する別の ALTER TABLE
ステートメントを実行します。
-- 列を追加
ALTER TABLE Customers
ADD Age INT;
-- デフォルト制約を作成
ALTER TABLE Customers
ADD CONSTRAINT DEFAULT_Age DEFAULT 21 FOR Age;
sp_addcolumn
システムプロシージャを使用すると、列を追加し、同時にデフォルト制約を作成することができます。
EXEC sp_addcolumn Customers, Age, INT, 21, DEFAULT_Age
この方法は、1つのステートメントで列の追加とデフォルト制約の作成を済ませることができるため、より簡潔です。
上記以外にも、以下の方法で列の追加時に名前付きデフォルト制約を作成することができます。
- トリガーを使用する: トリガーを使用して、新しいレコードが挿入されるたびにデフォルト値を割り当てることができます。
- ビューを使用する: ビューを使用して、列にデフォルト値を "表示" させることができます。ただし、ビューはデータ自体を変更するわけではないことに注意する必要があります。
どの方法を選択するかは、状況によって異なります。基本的な場合は、方法 1 または方法 2 をお勧めします。より高度な方法が必要な場合は、トリガーやビューを検討することができます。
sql sql-server constraints