sp_bindefault (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
デフォルトを列または別名データ型にバインドします。
重要
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、ALTER TABLE または
構文
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を継承します。 既定値は、 text、 ntext にバインドできません。 image、 varchar(max)、 nvarchar(max)、 varbinary(max)、 xml、 timestamp、または CLR ユーザー定義型の列、 IDENTITY
プロパティを持つ列、計算列、または既に DEFAULT
制約がある列。
@objname は、区切り識別子として角かっこ ([
と ]
) を含めることができます。 詳細については、「 Database 識別子」を参照してください。
[ @futureonly = ] 'futureonly'
既定のデータ型をエイリアス データ型にバインドする場合にのみ使用されます。 @futureonly は varchar(15) で、既定値は NULL
です。 このパラメーターを futureonly
に設定すると、そのデータ型の既存の列は新しい既定値を継承できません。 このパラメーターは、既定値を列にバインドするときに使用されることはありません。 @futureonlyがNULL
の場合、新しい既定値は、現在既定値がない、またはエイリアス データ型の既存の既定値を使用しているエイリアス データ型の列にバインドされます。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_bindefault
を使用すると、新しい既定値を列にバインドできますが、DEFAULT
制約を使用することをお勧めしますが、既存の既定値のバインドを解除せずに別名データ型にバインドすることもできます。 古い既定値はオーバーライドされます。 既定値を SQL Server システム データ型または CLR ユーザー定義型にバインドすることはできません。 既定値がバインド先の列と互換性がない場合、SQL Server データベース エンジンは、バインド時ではなく、既定値を挿入しようとしたときにエラー メッセージを返します。
エイリアス データ型の既存の列は、既定値が直接バインドされているか、 futureonly が 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値にfutureonly
が指定されていないか、列に既定のバインドが直接設定されていない限り、ssn
型の既存の列も既定のdef_ssn
を継承します。 列にバインドされた既定値は、常にデータ型にバインドされた既定値よりも優先されます。
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';
C: futureonly
オプションを使用します
次の例では、既定の def_ssn
をエイリアス データ型 ssn
にバインドします。 futureonly
が指定されているため、ssn
型の既存の列は影響を受けません。
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';
D. 区切り記号付き識別子を使用する
次の例は、@objnameで区切られた識別子 ([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.