ALTER TABLE ステートメントを使用して既存の列にデフォルト値を設定する方法
SQL Server で既存の列にデフォルト値を設定するには、以下の2つの方法があります。
- ALTER TABLE ステートメントを使用する
- DEFAULT 制約を使用する
ALTER TABLE ステートメントを使用すると、既存の列にデフォルト値を設定できます。構文は以下の通りです。
ALTER TABLE table_name
ALTER COLUMN column_name
SET DEFAULT default_value;
例
ALTER TABLE Customers
ALTER COLUMN Age
SET DEFAULT 21;
この例では、Customers
テーブルの Age
列のデフォルト値を 21
に設定しています。
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
DEFAULT default_value
FOR column_name;
ALTER TABLE Customers
ADD CONSTRAINT DF_Age
DEFAULT 21
FOR Age;
注意事項
- デフォルト値を設定する列は、NULL を許容する必要があります。
- デフォルト値を設定する列のデータ型とデフォルト値のデータ型が一致する必要があります。
- DEFAULT 制約は、既存のデータには適用されません。
補足
- SQL Server 2008 では、ALTER TABLE ステートメントを使用して既存の列にデフォルト値を設定することはできません。DEFAULT 制約を使用する必要があります。
- T-SQL は、SQL Server で使用されるクエリ言語です。
- 上記以外にも、デフォルト値を設定する方法はいくつかあります。詳しくは、SQL Server のドキュメントを参照してください。
- デフォルト値を設定する前に、データベースのバックアップを取ることをお勧めします。
USE AdventureWorks2019;
GO
ALTER TABLE Person.Address
ALTER COLUMN City
SET DEFAULT '東京';
GO
この例では、AdventureWorks2019
データベースの Person.Address
テーブルの City
列のデフォルト値を 東京
に設定しています。
USE AdventureWorks2019;
GO
ALTER TABLE Person.Address
ADD CONSTRAINT DF_City
DEFAULT '東京'
FOR City;
GO
実行結果
-- ALTER TABLE ステートメントを使用する場合
SELECT City
FROM Person.Address
WHERE City IS NULL;
-- 結果:
-- 該当するデータなし
-- DEFAULT 制約を使用する場合
SELECT City
FROM Person.Address
WHERE City IS NULL;
-- 結果:
-- City |
-- ------
-- 東京 |
解説
上記のサンプルコードを実行すると、City
列のデフォルト値が 東京
に設定されます。 NULL
値を持つデータは、デフォルト値である 東京
に更新されます。
既存の列にデフォルト値を設定する他の方法
INSERT ステートメントの VALUES
句で、列の値を省略すると、デフォルト値が設定されます。
USE AdventureWorks2019;
GO
INSERT INTO Person.Address (FirstName, LastName, StateProvinceID)
VALUES ('山田', '太郎', 1);
GO
この例では、Person.Address
テーブルに新しいデータを追加します。 City
列の値は省略されているため、デフォルト値である 東京
が設定されます。
USE AdventureWorks2019;
GO
UPDATE Person.Address
SET City = NULL
WHERE City = '大阪';
GO
DEFAULT 値を持つ新しい列を作成する
既存の列を変更せずに、DEFAULT 値を持つ新しい列を作成することもできます。
USE AdventureWorks2019;
GO
ALTER TABLE Person.Address
ADD CityNew VARCHAR(50) DEFAULT '東京';
GO
- INSERT ステートメントや UPDATE ステートメントを使用する方法は、既存のデータにデフォルト値を適用できない場合があります。
- DEFAULT 値を持つ新しい列を作成する方法は、既存のデータに影響を与えません。
sql-server sql-server-2008 t-sql