sp_bindefault (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

デフォルトを列または別名データ型にバインドします。

重要

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

Transact-SQL 構文表記規則

構文

sp_bindefault
    [ @defname = ] N'defname'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

引数

[ @defname = ] N'defname'

によって CREATE DEFAULT作成される既定値の名前。 @defnameは nvarchar(776)で、既定値はありません。

[ @objname = ] N'objname'

テーブルと列の名前、または既定値がバインドされる別名データ型。 @objnameは nvarchar(776)で、既定値はありません。 @objnameは、varchar(max)、nvarchar(max)varbinary(max)xmlまたは CLR ユーザー定義型では定義できません。

@objnameが 1 部構成の名前の場合は、別名データ型として解決されます。 2 部構成または 3 部構成の名前の場合、最初にテーブルと列として解決されます。この解決が失敗した場合は、別名データ型として解決されます。 既定では、既定値が列に直接バインドされていない限り、エイリアス データ型の既存の列は@defnameを継承します。 既定値は、テキスト、ntextimage、varchar(max)、nvarchar(max)varbinary(max)xmltimestampまたは CLR ユーザー定義型の列、プロパティを持つIDENTITY列、計算列、または制約が既DEFAULTにある列にバインドできません。

@objnameには、角かっこ ([および]) を区切り識別子として含めることができます。 詳細については、「データベース識別子」を参照してください

[ @futureonly = ] 'futureonly'

既定のデータ型をエイリアス データ型にバインドする場合にのみ使用されます。 @futureonlyは varchar(15) で、既定値は NULL. このパラメーターが futureonly設定されている場合、そのデータ型の既存の列は新しい既定値を継承できません。 このパラメーターは、既定値を列にバインドするときに使用されることはありません。 @futureonlyNULL場合、新しい既定値は、現在既定値がない、またはエイリアス データ型の既存の既定値を使用しているエイリアス データ型の列にバインドされます。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

制約を使用 sp_bindefault することをお勧めしますが、新しい既定値を列にバインドしたり、既存の DEFAULT 既定値をバインド解除せずに別名データ型にバインドしたりできます。 古い既定値はオーバーライドされます。 既定値を SQL Server システム データ型または CLR ユーザー定義型にバインドすることはできません。 既定値がバインド先の列と互換性がない場合、SQL Server データベース エンジンは、バインド時ではなく、既定値を挿入しようとしたときにエラー メッセージを返します。

別名データ型の既存の列は、既定値がそれらに直接バインドされているか、将来の列としてfutureonly指定されていない限り、新しい既定値を継承します。 別名データ型の新しい列は、常に既定値を継承します。

既定値を列にバインドすると、関連情報がカタログ ビューに sys.columns 追加されます。 既定値を別名データ型にバインドすると、関連情報がカタログ ビューに sys.types 追加されます。

アクセス許可

ユーザーは、テーブルを所有しているか、sysadmin 固定サーバー ロールのメンバーであるか、固定データベース ロールdb_ownerおよびdb_ddladminされている必要があります。

A. 既定値を列にバインドする

既定の名前 today は、現在のデータベースで定義されます CREATE DEFAULT。 次の例では、テーブルの列に HireDate 既定値を Employee バインドします。 テーブルに Employee 行が追加され、列のデータが HireDate 指定されていない場合、列は既定値 todayの値を取得します。

USE master;
GO

EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';

B. 既定値をエイリアス データ型にバインドする

def_ssn という名前のデフォルトと、ssn という別名データ型が既に存在しています。 次の例では、既定値def_ssnssnを . テーブルが作成されると、エイリアス データ型 ssnが割り当てられているすべての列によって既定値が継承されます。 型ssnの既存の列も、@futureonlydef_ssn値に指定されていない限り、既定値を継承します。または、列に既定のバインドが直接設定されている場合を除futureonlyきます。 列にバインドされた既定値は、常にデータ型にバインドされた既定値よりも優先されます。

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn';

C: futureonly オプションを使用します

次の例では、既定値 def_ssn をエイリアス データ型にバインドします ssnfutureonly が指定されているため、ssn 型の既存の列は影響を受けません。

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. 区切り記号付き識別子を使用する

次の例は、 [t.1]区切り記号付き識別子 (@objname) の 使用を示しています。

USE master;
GO

CREATE TABLE [t.1] (c1 int);
-- Notice the period as part of the table name.
EXEC sp_bindefault 'default1', '[t.1].c1';
-- The object contains two periods;
-- the first is part of the table name,
-- and the second distinguishes the table name from the column name.