CREATE DEFAULT (Transact-SQL)

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

ms173565.note(ja-jp,SQL.90).gif重要 :
CREATE DEFAULT は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業では CREATE DEFAULT の使用は避け、現在 CREATE DEFAULT を使用しているアプリケーションは修正するようにしてください。代わりに、ALTER TABLE または CREATE TABLE の DEFAULT キーワードを使用して作成された既定の定義を使用します。詳細については、「DEFAULT 定義の作成と変更」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

CREATE DEFAULT [ schema_name . ] default_name 
AS constant_expression [ ; ]

引数

  • schema_name
    デフォルトが属しているスキーマの名前を指定します。
  • default_name
    デフォルトの名前です。デフォルトの名前は、識別子のルールに従っている必要があります。デフォルトの所有者名の指定は省略可能です。
  • constant_expression
    定数値のみを含むを指定します (列名や他のデータベース オブジェクト名を含めることはできません)。別名データ型を含んでいるものを除き、任意の定数、組み込み関数、または計算式を使用できます。ユーザー定義関数は使用できません。文字および日付定数は単一引用符 (') で囲んでください。金額、整数、および浮動小数点定数には引用符は必要ありません。binary 型データには先頭に 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

デフォルト

NULL

NULL

NOT NULL

エラー

デフォルト

エラー

エラー

ms173565.note(ja-jp,SQL.90).gifメモ :
SQL Server が空文字列を 1 つの空白文字として解釈するか、実際の空文字列として解釈するかは、sp_dbcmptlevel の設定によって決まります。互換性レベルが 65 以下の場合は、SQL Server は空文字列を 1 つの空白文字として解釈します。互換性レベルが 70 の場合は、SQL Server は空文字列を空文字列と解釈します。詳細については、「sp_dbcmptlevel (Transact-SQL)」を参照してください。

デフォルトの名前を変更するには、sp_rename を使用します。デフォルトに関するレポートを表示するには、sp_help を使用します。

権限

CREATE DEFAULT を実行するには、ユーザーは少なくとも現在のデータベース内では CREATE DEFAULT 権限を、デフォルトが作成されるスキーマに対しては ALTER 権限を持つ必要があります。

A. 単純な文字のデフォルトを作成する

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

USE AdventureWorks;
GO
CREATE DEFAULT phonedflt AS 'unknown';

B. デフォルトをバインドする

次の例では、例 A で作成したデフォルトをバインドします。デフォルトが有効になるのは、Contact テーブルの Phone 列にエントリが指定されていない場合のみです。エントリの省略は、INSERT ステートメントで NULL を明示的に指定する場合とは異なることに注意してください。

phonedflt というデフォルトは存在しないので、次の Transact-SQL ステートメントは失敗します。次の例は、説明用のものです。

USE AdventureWorks;
GO
sp_bindefault 'phonedflt', 'Person.Contact.Phone';

参照

関連項目

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)

その他の技術情報

バッチ
オブジェクト名としての識別子の使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手