sp_bindefault (Transact-SQL)
デフォルトを列または別名データ型にバインドします。
重要 |
---|
この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションはできるだけ早く修正してください。代わりに、ALTER TABLE ステートメントまたは CREATE TABLE ステートメントの DEFAULT キーワードを使用してデフォルト定義を作成することをお勧めします。詳細については、「DEFAULT 定義の作成と変更」を参照してください。 |
構文
sp_bindefault [ @defname = ] 'default' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
引数
[ [ @defname= ] 'default'
CREATE DEFAULT で作成されるデフォルトの名前です。default は nvarchar(776) であり、既定値はありません。[ [ @objname= ] 'object_name'
デフォルトがバインドされるテーブルと列、または別名データ型の名前です。object_name は nvarchar(776) であり、既定値はありません。object_name は、varchar(max)、nvarchar(max)、varbinary(max)、xml、または CLR ユーザー定義型を使用して定義することはできません。object_name が 1 部構成の名前の場合は、別名データ型として解決されます。2 部構成または 3 部構成の名前の場合は、最初にテーブルおよび列として解決され、この解決が失敗すると、別名データ型として解決されます。既定では、既存の別名データ型の列は、任意のデフォルトを直接その列にバインドしない限り、default の値を継承します。text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、timestamp、または CLR ユーザー定義型の列、IDENTITY プロパティが設定されている列、計算列、既に DEFAULT 制約が設定されている列にデフォルトをバインドすることはできません。
注意 object_name は、区切られた識別子として角かっこ [] を含むことができます。詳細については、「区切られた識別子 (データベース エンジン)」を参照してください。
[ [ @futureonly= ] 'futureonly_flag'
デフォルトを別名データ型にバインドするときにのみ使用されます。futureonly_flag は varchar(15) であり、既定値は NULL です。futureonly を設定すると、そのデータ型の既存の列は新しいデフォルトを継承しません。デフォルトを列にバインドするときには決してこのパラメータを使用しないでください。futureonly_flag が NULL の場合、新しいデフォルトは現在デフォルトが割り当てられていない別名データ型の列、または別名データ型の既存のデフォルトを使用している列にバインドされます。
リターン コード値
成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。
説明
sp_bindefault を使用すると、既存のデフォルトをアンバインドせずに、新しいデフォルトを列または別名データ型にバインドできます。ただし、できるだけ DEFAULT 制約を使用してください。既存のデフォルトは無効になります。SQL Server のシステム データ型や CLR ユーザー定義型にデフォルトをバインドすることはできません。デフォルトとそれをバインドする列の間に互換性がない場合は、バインドしたときではなく、デフォルト値を挿入しようとしたときに SQL Server データベース エンジンからエラー メッセージが返されます。
別名データ型の既存の列は、デフォルトが直接その列にバインドされているか、または futureonly_flag が futureonly に指定されている場合を除き、新しいデフォルトを継承します。別名データ型の新しい列は常にデフォルトを継承します。
列にデフォルトをバインドすると、関連情報が sys.columns カタログ ビューに追加されます。別名データ型にデフォルトをバインドすると、関連情報が sys.types カタログ ビューに追加されます。
権限
ユーザーはテーブルを所有しているか、固定サーバー ロール sysadmin、固定データベース ロール db_owner または db_ddladmin メンバである必要があります。
例
A. 列にデフォルトをバインドする
today という名前のデフォルトが、CREATE DEFAULT を使用して現在のデータベース内で定義されています。次の例は、このデフォルトを Employee テーブルの HireDate 列にバインドします。Employee テーブルに行を追加するときに、HireDate 列の入力がなければ、この列にデフォルト today が入力されます。
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
B. 別名データ型にデフォルトをバインドする
def_ssn という名前のデフォルトと、ssn という別名データ型が既に存在しています。次の例では、デフォルト def_ssn を ssn にバインドします。テーブルを作成すると、別名データ型 ssn が割り当てられているすべての列でデフォルトが継承されます。futureonly_flag の値として futureonly が指定されているか、列にデフォルトが直接バインドされている場合を除き、ssn 型の既存の列も def_ssn というデフォルトを継承します。列にバインドされているデフォルトは、データ型にバインドされているデフォルトより常に優先します。
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';
C. futureonly_flag を使用する
次の例では、デフォルト def_ssn を別名データ型 ssn にバインドします。futureonly が指定されているため、ssn 型の既存の列には影響がありません。
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';
D. 区切られた識別子を使用する
次の例では、object_name で区切られた識別子 [t.1] を使用しています。
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.