sp_bindrule (Transact-SQL)
適用対象:SQL ServerAzure SQL Database
ルールを列または別名データ型にバインドします。
重要
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、Unique 制約とチェック制約を使用してください。 CHECK 制約は、CREATE TABLE ステートメントまたは ALTER TABLE ステートメントの CHECK キーワード (keyword)を使用して作成されます。
構文
sp_bindrule
[ @rulename = ] N'rulename'
, [ @objname = ] N'objname'
[ , [ @futureonly = ] 'futureonly' ]
[ ; ]
引数
[ @rulename = ] N'rulename'
ステートメントによって作成されたルールの CREATE RULE
名前。 @rulenameは nvarchar(776) で、既定値はありません。
[ @objname = ] N'objname'
テーブルと列、またはルールをバインドするエイリアス データ型。 @objnameは nvarchar(776)で、既定値はありません。
ルールは、テキスト、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、xml、CLR ユーザー定義型、またはタイムスタンプ列にバインドできません。 ルールを計算列にバインドすることはできません。
@objnameは nvarchar(776) で、既定値はありません。 @objnameが 1 部構成の名前の場合は、別名データ型として解決されます。 2 部構成または 3 部構成の名前の場合、最初にテーブルと列として解決されます。この解決が失敗した場合は、別名データ型として解決されます。 既定では、ルールが列に直接バインドされていない限り、エイリアス データ型の既存の列は@rulenameを継承します。
@objnameは、角かっこ ([
および]
) 文字を区切り識別子文字として含めることができます。 詳細については、「データベース識別子」を参照してください。
別名データ型を使用する式に対して作成されたルールは、列または別名データ型にバインドできますが、参照されるとコンパイルに失敗します。 別名データ型に対して作成されたルールは使用しないでください。
[ @futureonly = ] 'futureonly'
ルールを別名データ型にバインドする場合にのみ使用されます。 @futureonlyは varchar(15) で、既定値は NULL
. このパラメーターを futureonly
設定すると、エイリアス データ型の既存の列が新しいルールを継承できなくなります。 @futureonlyの場合、新しいルールはNULL
、現在ルールがない、またはエイリアス データ型の既存のルールを使用しているエイリアス データ型の列にバインドされます。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
既存の規則をバインド解除せずに、新しい規則を列にバインドするか (ただし、制約を使用 CHECK
することをお勧めします)、別名データ型 sp_bindrule
にバインドできます。 元のルールはオーバーライドされます。 ルールが既存 CHECK
の制約を持つ列にバインドされている場合、すべての制限が評価されます。 規則を SQL Server データ型にバインドすることはできません。
この規則は、バインディングではなく、ステートメントが試行されるときに INSERT
適用されます。 このような操作は有効ではありませんが、文字ルールを数値データ型の列にINSERT
バインドできます。
別名データ型の既存の列は、@futureonlyが次のように指定されていない限り、新しい規則をfutureonly
継承します。 別名データ型で定義された新しい列は、常にルールを継承します。 ただし、ステートメントの句によって ALTER COLUMN
列の ALTER TABLE
データ型がルールにバインドされた別名データ型に変更された場合、そのデータ型にバインドされたルールは列によって継承されません。 規則は、次を使用 sp_bindrule
して列に明示的にバインドする必要があります。
ルールを列にバインドすると、関連する情報がテーブルに sys.columns
追加されます。 ルールを別名データ型にバインドすると、関連する情報がテーブルに sys.types
追加されます。
アクセス許可
テーブル列にルールをバインドするには、テーブルに対するアクセス許可が ALTER
必要です。 CONTROL
エイリアス データ型に対するアクセス許可、または ALTER
型が属するスキーマに対するアクセス許可は、エイリアス データ型にルールをバインドするために必要です。
例
A. ルールを列にバインドする
ステートメントを使用してCREATE RULE
、現在のデータベースに名前付きのtoday
規則が作成されると仮定して、次の例では、テーブルの列に規則をHireDate
Employee
バインドします。 行が Employee
テーブルに追加されると、HireDate
列のデータは today
ルールと照らし合わせてチェックされます。
USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate';
B. エイリアス データ型にルールをバインドする
rule_ssn
という名前のルールがあり、ssn
という名前の別名データ型があるものとします。次の例では、rule_ssn
を ssn
にバインドします。 ステートメントでは CREATE TABLE
、型 ssn
の列はルールを rule_ssn
継承します。 型ssn
の既存の列もルールをrule_ssn
継承します。ただし、将来@futureonlyに指定されていないかssn
、規則が直接バインドされている場合を除きます。 列にバインドされたルールは、常にデータ型にバインドされた既定値よりも優先されます。
USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn';
C: futureonly
オプションを使用します
次の例では、rule_ssn
ルールを別名データ型 ssn
にバインドします。 futureonly
が指定されているため、ssn
型の既存の列は影響を受けません。
USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly';
D. 区切り記号付き識別子を使用する
次の例は、パラメーターでの 区切り識別子の使用@objname 示しています。
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.
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示