sp_bindefault (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
デフォルトを列または別名データ型にバインドします。
重要
この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに 、ALTER TABLE ステートメントまたは CREATE TABLE ステートメントの 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 部構成の名前の場合は、最初にテーブルと列として解決されます。この解決が失敗した場合は、別名データ型として解決されます。 既定では、既定値が列に直接バインドされていない限り、別名データ型の既存の列は 既定値を継承します。 既定値は、 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_ddladmin db_ownerである必要があります。
例
A. 既定値を列にバインドする
という名前 today
の既定値は、CREATE DEFAULT を使用して現在のデータベースで定義されています。次の例では、既定値を HireDate
テーブルの列に Employee
バインドします。 Employee
テーブルに行を追加するときに、HireDate
列の入力がなければ、この列にデフォルト today
が入力されます。
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
B. 既定のデータ型を別名データ型にバインドする
def_ssn
という名前のデフォルトと、ssn
という別名データ型が既に存在しています。 次の例では、既定値を にssn
バインドしますdef_ssn
。 テーブルが作成されると、既定値は別名データ型 ssn
が割り当てられているすべての列によって継承されます。 ssn 型の既存の列は、futureonly_flag値に futureonly が指定されていない限り、または列に直接バインドされた既定値がない限り、既定の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. 区切り記号付き識別子の使用
次の例は、 [t.1]
object_nameで区切られた識別子 を使用する方法 を示しています。
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)