CREATE DEFAULT (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
デフォルトと呼ばれるオブジェクトを作成します。 列または別名データ型にバインドすると、オブジェクトがバインドされる列 (別名データ型の場合はすべての列) で、挿入時に値が明示的に指定されない場合は、デフォルトによってそれらに挿入される値が指定されます。
重要
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、ALTER TABLE または CREATE TABLE の DEFAULT キーワードを使用して作成される既定の定義を使用してください。
構文
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
引数
schema_name
デフォルトが所属するスキーマの名前を指定します。
default_name
デフォルトの名前。 デフォルトの名前は、識別子のルールに従っている必要があります。 既定の所有者名の指定は省略可能です。
constant_expression
定数値のみを含む式 (列名や他のデータベース オブジェクト名を含めることはできません)。 任意の定数、組み込み関数、または数式を使用できます。別名データ型を含むものは使用できません。 ユーザー定義関数は使用できません。 文字および日付定数は単一引用符 (') で囲んでください。金額、整数、および浮動小数点定数には引用符は必要ありません。 バイナリ データの前には 0x を付ける必要があり、通貨データの前にはドル記号 ($) を付ける必要があります。 既定値は、列のデータ型と互換性がある必要があります。
注釈
デフォルト名は現在のデータベース内にのみ作成できます。 データベース内で、既定の名前はスキーマにより一意である必要があります。 デフォルトを作成したら、sp_bindefault を使用してデフォルトを列または別名データ型にバインドします。
デフォルトとバインド先の列に互換性がない場合、既定値の挿入を試みると SQL Server によってエラー メッセージが生成されます。 たとえば、numeric 型の列のデフォルトとして N/A を使用することはできません。
バインドされている列にとって既定値が長すぎる場合、値は切り捨てられます。
CREATE DEFAULT ステートメントは、単一のバッチ内で他の Transact-SQL ステートメントと組み合わせることはできません。
同じ名前の新しいデフォルトを作成する前に、古いデフォルトを削除する必要があります。 さらに、デフォルトを削除する前に、sp_unbindefault を使用してバインドを解除する必要があります。
列が既定値とそれに関連するルールの両方を持つ場合、既定値はそのルールに従っている必要があります。 ルールに矛盾するデフォルトは挿入できません。挿入を試行すると、そのたびに SQL Server ではエラー メッセージが表示されます。
列にバインドすると、次の場合に既定値が挿入されます。
値が明示的に挿入されない場合。
DEFAULT VALUES または DEFAULT のいずれかのキーワードは、既定値を挿入するために INSERT と共に使用されます。
列の作成時に NOT NULL が指定され、その列のデフォルトが作成されていない場合、ユーザーがその列に入力を行わないとエラー メッセージが生成されます。 次の表は、デフォルトの有無と、NULL または NOT NULL として定義された列の関係を示しています。 テーブル内のエントリに結果が表示されます。
列の定義 | 入力なし、既定値なし | 入力なし、デフォルトあり | NULL を入力、デフォルトなし | NULL を入力、既定値あり |
---|---|---|---|---|
NULL | NULL | default | NULL | NULL |
NOT NULL | エラー | default | error | error |
デフォルトの名前を変更するには、sp_rename を使用します。 デフォルトに関するレポートを表示するには、sp_help を使用します。
アクセス許可
CREATE DEFAULT を実行するには、ユーザーは少なくとも現在のデータベース内では CREATE DEFAULT 権限を、デフォルトが作成されるスキーマに対しては ALTER 権限を持っている必要があります。
例
A. シンプルな文字の既定値を作成する
次の例では、"unknown
" という文字のデフォルトを作成します。
USE AdventureWorks2022;
GO
CREATE DEFAULT phonedflt AS 'unknown';
B. 既定値をバインドする
次の例では、例 A で作成したデフォルトをバインドします。デフォルトが有効になるのは、Contact
テーブルの Phone
列にエントリが指定されていない場合のみです。
Note
任意のエントリを省略することは、INSERT ステートメントで NULL を明示的に示すこととは異なります。
phonedflt
という名前のデフォルトは存在しないので、次の Transact-SQL ステートメントは失敗します。 これは例示のみを目的としています。
USE AdventureWorks2022;
GO
sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';
参照
ALTER TABLE (Transact-SQL)
CREATE RULE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL)
式 (Transact-SQL)
INSERT (Transact-SQL)
sp_bindefault (Transact-SQL)
sp_help (Transact-SQL)
sp_helptext (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindefault (Transact-SQL)