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 の場合、新しいデフォルトは現在デフォルトが割り当てられていない別名データ型の列、または別名データ型の既存のデフォルトを使用している列にバインドされます。
解説
sp_bindefault を使用すると、既存のデフォルトをアンバインドせずに、新しいデフォルトを列または別名データ型にバインドできます。ただし、できるだけ DEFAULT 制約を使用してください。既存のデフォルトは無効になります。SQL Server 2005 のシステム データ型や CLR ユーザー定義型にデフォルトをバインドすることはできません。デフォルトとそれをバインドする列の間に互換性がない場合は、バインドしたときではなく、デフォルト値を挿入しようとしたときに SQL Server データベース エンジン からエラー メッセージが返されます。
別名データ型の既存の列は、デフォルトが直接その列にバインドされているか、または futureonly_flag が futureonly に指定されている場合を除き、新しいデフォルトを継承します。別名データ型の新しい列は常にデフォルトを継承します。
列にデフォルトをバインドすると、関連情報が sys.columns カタログ ビューに追加されます。別名データ型にデフォルトをバインドすると、関連情報が sys.types カタログ ビューに追加されます。
権限
ユーザーはテーブルを所有しているか、固定サーバー ロール sysadmin、固定データベース ロール db_owner または db_ddladmin メンバである必要があります。
戻り値
成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。
例
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.
参照
関連項目
データベース エンジンのストアド プロシージャ (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
DROP DEFAULT (Transact-SQL)
sp_unbindefault (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)