INFORMATION_SCHEMAを使用してデフォルト制約を見つける方法
データベースには、テーブルの列に設定できる制約がいくつかあります。デフォルト制約は、列に値が挿入されない場合に適用される値を指定します。
INFORMATION_SCHEMAは、データベースに関する情報を格納する仮想データベースです。この情報を使用して、デフォルト制約を含む、テーブルに関するさまざまな情報を取得できます。
手順
以下の手順を使用して、INFORMATION_SCHEMAを使用してデフォルト制約を見つけることができます。
- クエリ エディターを開きます。
- 以下のクエリを実行します。
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
DEFAULT_VALUE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_DEFAULT IS NOT NULL;
- クエリ結果を確認します。
- TABLE_NAME: デフォルト制約を持つ列を含むテーブルの名前
- COLUMN_NAME: デフォルト制約を持つ列の名前
- CONSTRAINT_NAME: デフォルト制約の名前
- DEFAULT_VALUE: デフォルト値
例
以下の例は、Customers
テーブルのFirstName
列に設定されているデフォルト制約を示しています。
TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | DEFAULT_VALUE
----------+-------------+-----------------+-----------------
Customers | FirstName | DF_FirstName | John
USE AdventureWorks2019;
GO
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
DEFAULT_VALUE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_DEFAULT IS NOT NULL;
GO
このコードを実行すると、AdventureWorks2019
データベースのすべてのテーブルのデフォルト制約が表示されます。
出力例
TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | DEFAULT_VALUE
----------+-------------+-----------------+-----------------
Address | AddressLine1 | DF_AddressLine1 | NULL
Address | AddressLine2 | DF_AddressLine2 | NULL
Address | City | DF_City | NULL
...
解説
USE AdventureWorks2019;
ステートメントは、AdventureWorks2019
データベースをアクティブ化します。SELECT
ステートメントは、INFORMATION_SCHEMA.COLUMNS
テーブルから情報を選択します。WHERE
句は、COLUMN_DEFAULT
列がNULLではない行のみを選択します。ORDER BY
句は、結果をテーブル名と列名で昇順に並べ替えます。
sys.columns
テーブルは、システム テーブルであり、データベース内のすべての列に関する情報を格納します。このテーブルには、デフォルト制約に関する情報も含まれています。
SELECT
name AS TableName,
col_name AS ColumnName,
default_value AS DefaultValue
FROM sys.columns
WHERE default_value IS NOT NULL;
sp_helpconstraint プロシージャを使用する
sp_helpconstraint
プロシージャは、指定されたテーブルの制約に関する情報を表示します。
EXEC sp_helpconstraint 'TableName';
データベース管理ツールを使用する
多くのデータベース管理ツールには、デフォルト制約を含むテーブルの情報を表示する機能があります。
どの方法を使用するべきか
どの方法を使用するかは、状況によって異なります。
- INFORMATION_SCHEMA は、データベースに関する情報を取得するための標準的な方法です。
sys.columns
テーブルは、より詳細な情報を提供できます。- データベース管理ツールは、使いやすいグラフィカル インターフェースを提供します。
sql sql-server t-sql