sp_bindefault (Transact-SQL)

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

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

重要

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

Transact-SQL 構文表記規則

構文

  
sp_bindefault [ @defname = ] 'default' ,   
    [ @objname = ] 'object_name'   
    [ , [ @futureonly = ] 'futureonly_flag' ]   

引数

[ @defname = ] 'default' CREATE DEFAULT によって作成される既定値の名前を指定します。 defaultnvarchar(776)で、既定値はありません。

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

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

注意

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

[ @futureonly = ] 'futureonly_flag' 既定値を別名データ型にバインドする場合にのみ使用されます。 futureonly_flagvarchar(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 を別名データ型 にバインドします ssnfutureonly が指定されているため、型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)