sp_bindrule (Transact-SQL)

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

ms176063.note(ja-jp,SQL.90).gif重要 :
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに CHECK 制約 を使用してください。CHECK 制約は、CREATE TABLE ステートメントまたは ALTER TABLE ステートメントの CHECK キーワードを使用して作成されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_bindrule [ @rulename = ] 'rule' , 
     [ @objname = ] 'object_name' 
     [ , [ @futureonly = ] 'futureonly_flag' ] 

引数

[ @rulename=] 'rule'

CREATE RULE ステートメントによって作成されたルールの名前です。rulenvarchar(776) であり、既定値はありません。

[ @objname=] 'object_name'

ルールがバインドされるテーブルと列、または別名データ型です。ルールは textntextimagevarchar(max)nvarchar(max)varbinary(max)xml、CLR ユーザー定義型、または timestamp 列にはバインドできません。ルールは、計算列にバインドすることはできません。

object_namenvarchar(776) であり、既定値はありません。object_name が 1 部構成の名前の場合、別名データ型として解決されます。2 部構成または 3 部構成の名前の場合は、最初にテーブルおよび列として解決され、この解決が失敗すると、別名データ型として解決されます。既定では、既存の別名データ型の列は、別のルールを直接その列にバインドしない限り rule の値を継承します。

ms176063.note(ja-jp,SQL.90).gifメモ :
object_name には、角かっこ [ および ] を区切り記号識別子の文字として含めることができます。詳細については、「区切られた識別子 (データベース エンジン)」を参照してください。
ms176063.note(ja-jp,SQL.90).gifメモ :
別名データ型を使用する式に対して作成されたルールは、列または別名データ型にバインドできますが、参照されてもコンパイルできません。別名データ型に対して作成されたルールは使用しないでください。

[ @futureonly= ] 'futureonly_flag'

ルールを別名データ型にバインドするときにのみ使用されます。future_only_flagvarchar(15) であり、既定値は NULL です。このパラメータを futureonly に設定すると、別名データ型の既存の列では新しいルールを継承しません。futureonly_flag が NULL の場合、新しいルールは、現在ルールが割り当てられていない別名データ型の列、または別名データ型の既存のルールを使用している列にバインドされます。

解説

sp_bindrule を使用すると、既存のルールをバインド解除せずに、新しいルールを列または別名データ型にバインドできます。ただし、できるだけ CHECK 制約を使用してください。元のルールは無効になります。既に CHECK 制約のある列にルールをバインドすると、すべての制限が評価されます。SQL Server データ型にはルールをバインドできません。

ルールは、バインド時ではなく INSERT ステートメントを試行したときに設定されます。numeric データ型の列には、文字ルールをバインドすることはできますが、INSERT 操作を行うことはできません。

futureonly_flagfutureonly として指定されていない限り、別名データ型の既存の列は新しいルールを継承します。別名データ型が定義された新しい列は、常にルールを継承します。しかし、ALTER TABLE ステートメントの ALTER COLUMN 句によって、列のデータ型をルールがバインドされた別名データ型に変更すると、データ型にバインドしているルールはその列に継承されません。sp_bindrule を使用して、明示的にルールを列にバインドする必要があります。

列にルールをバインドすると、関連情報が sys.columns テーブルに登録されます。別名データ型にルールをバインドすると、関連情報が sys.types テーブルに登録されます。

権限

テーブル列にルールをバインドするには、そのテーブルに対する ALTER 権限が必要です。別名データ型にルールをバインドするには、その別名データ型に対する CONTROL 権限、またはそのデータ型の属するスキーマに対する ALTER 権限が必要です。

戻り値

成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。

A. 列にルールをバインドする

CREATE RULE ステートメントを使用して today という名前のルールが現在のデータベースで作成されているものとします。次の例では、Employee テーブルの HireDate 列に、このルールをバインドします。行が Employee テーブルに追加されると、HireDate 列のデータは today ルールと照らし合わせてチェックされます。

USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate'

B. 別名データ型にルールをバインドする

rule_ssn という名前のルールがあり、ssn という名前の別名データ型があるものとします。次の例では、rule_ssnssn にバインドします。CREATE TABLE ステートメントで、ssn 型の列は rule_ssn ルールを継承します。futureonly_flagfutureonly が指定されている場合や ssn にルールが直接バインドされている場合を除き、ssn 型の既存の列も rule_ssn ルールを継承します。列にバインドされているルールは、データ型にバインドされているルールより常に優先します。

USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn'

C. futureonly_flag を使用する

次の例では、rule_ssn ルールを別名データ型 ssn にバインドします。futureonly が指定されているため、ssn 型の既存の列は影響を受けません。

USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn', 'futureonly'

D. 区切られた識別子を使用する

次の例では、object_name パラメータでの区切られた識別子の使い方を示します。

USE master;
GO
CREATE TABLE [t.2] (c1 int) 
-- Notice the period as part of the table name.
EXEC sp_bindrule rule1, '[t.2].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)
データベース エンジンのストアド プロシージャ (Transact-SQL)
CREATE RULE (Transact-SQL)
DROP RULE (Transact-SQL)
sp_unbindrule (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手