次の方法で共有


デフォルト作成(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

デフォルトと呼ばれるオブジェクトを作成します。 列または別名データ型にバインドすると、オブジェクトがバインドされる列 (別名データ型の場合はすべての列) で、挿入時に値が明示的に指定されない場合は、デフォルトによってそれらに挿入される値が指定されます。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、DEFAULT または ALTER TABLECREATE TABLE キーワードを使用して作成された既定の定義を使用します。

Transact-SQL 構文表記規則

構文

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 ステートメントを 1 つのバッチ内の他の Transact-SQL ステートメントと組み合わせることはできません。

同じ名前の新しいデフォルトを作成する前に、古いデフォルトを削除する必要があります。 また、削除する前に sp_unbindefault を実行して、既定値をバインド解除する必要があります。

列が既定値とそれに関連するルールの両方を持つ場合、既定値はそのルールに従っている必要があります。 ルールに矛盾するデフォルトは挿入できません。挿入を試行すると、そのたびに SQL Server ではエラー メッセージが表示されます。

列にバインドすると、次の場合に既定値が挿入されます。

  • 値が明示的に挿入されない場合。
  • DEFAULT VALUESキーワードまたはDEFAULTキーワードは、既定値を挿入するためにINSERTと共に使用されます。

列の作成時に NOT NULL を指定し、その列の既定値を作成しない場合、ユーザーがその列にエントリを作成できなかったときにエラー メッセージが生成されます。 次の表は、既定値の存在と、 NULL または NOT NULLとしての列の定義の関係を示しています。 テーブル内のエントリに結果が表示されます。

列の定義 入力なし、既定値なし 入力なし、デフォルトあり NULL」と入力します。既定値は入力しません NULL」と入力します(既定値)
NULL NULL 既定値 NULL NULL
NOT NULL エラー 既定値 エラー エラー

既定値の名前を変更するには、 sp_rename 既定のレポートの場合は、 sp_helpを使用します。

アクセス許可

CREATE DEFAULTを使用するには、少なくとも、ユーザーは現在のデータベースでCREATE DEFAULT権限を持ち、既定値が作成されるスキーマに対するALTER権限を持っている必要があります。

A. 基本文字の既定値を作成する

次の例では、"unknown" という文字のデフォルトを作成します。

USE AdventureWorks2022;
GO

CREATE DEFAULT phonedflt
    AS 'unknown';

B. 既定値をバインドする

次の例では、例 A で作成したデフォルトをバインドします。デフォルトが有効になるのは、Phone テーブルの Contact 列にエントリが指定されていない場合のみです。

Note

エントリを省略することは、NULL ステートメントでINSERTを明示的に指定する場合とは異なります。

phonedflt という名前のデフォルトは存在しないので、次の Transact-SQL ステートメントは失敗します。 これは例示のみを目的としています。

USE AdventureWorks2022;
GO

EXECUTE sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';