將規(guī)則綁定到列或用戶定義的數(shù)據(jù)類型。
sp_bindrule [ @rulename = ] 'rule' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
[@rulename =] 'rule'
由 CREATE RULE 語(yǔ)句創(chuàng)建的規(guī)則名稱。rule 的數(shù)據(jù)類型為 nvarchar(776),無(wú)默認(rèn)值。
[@objname =] 'object_name'
綁定了規(guī)則的表和列或用戶定義的數(shù)據(jù)類型。object_name 的數(shù)據(jù)類型為 nvarchar(517),無(wú)默認(rèn)值。如果 object_name 沒有采取 table.column 格式,則認(rèn)為它屬于用戶定義數(shù)據(jù)類型。默認(rèn)情況下,用戶定義的數(shù)據(jù)類型的現(xiàn)有列繼承 rule,除非直接在列上綁定了規(guī)則。
說(shuō)明 object_name 中可以含有 [ and ] 字符作為分隔標(biāo)識(shí)符。有關(guān)更多信息,請(qǐng)參見分隔標(biāo)識(shí)符。
[@futureonly =] 'futureonly_flag'
僅當(dāng)將規(guī)則綁定到用戶定義的數(shù)據(jù)類型時(shí)才使用。future_only_flag 的數(shù)據(jù)類型為 varchar(15),默認(rèn)值為 NULL。將此參數(shù)在設(shè)置為 futureonly 時(shí),它會(huì)防止用戶定義數(shù)據(jù)類型的現(xiàn)有列繼承新規(guī)則。如果 futureonly_flag 為 NULL,那么新規(guī)則將綁定到用戶定義數(shù)據(jù)類型的每一列,條件是此數(shù)據(jù)類型當(dāng)前無(wú)規(guī)則或者使用用戶定義數(shù)據(jù)類型的現(xiàn)有規(guī)則。
0(成功)或 1(失敗)
可以使用 sp_bindrule 在不取消綁定現(xiàn)有規(guī)則的情況下,將新規(guī)則綁定到列(盡管最好使用 CHECK 約束)或者用戶定義的數(shù)據(jù)類型。替代原有規(guī)則。如果使用現(xiàn)有 CHECK 約束將規(guī)則綁定到列,那么將評(píng)估所有限制。不能將規(guī)則綁定到 Microsoft® SQL Server™ 數(shù)據(jù)類型。
當(dāng)試圖執(zhí)行 INSERT 語(yǔ)句時(shí)(不是在綁定時(shí)),將強(qiáng)行執(zhí)行規(guī)則。盡管此處 INSERT 非法,仍然可以將字符規(guī)則綁定到 numeric 數(shù)據(jù)類型的列。
除非將 futureonly_flag 指定為 futureonly,否則用戶定義數(shù)據(jù)類型的現(xiàn)有列將繼承新規(guī)則。使用用戶定義數(shù)據(jù)類型定義的新列始終繼承規(guī)則。但是,如果 ALTER TABLE 語(yǔ)句的 ALTER COLUMN 子句將列的數(shù)據(jù)類型更改為綁定規(guī)則的用戶定義數(shù)據(jù)類型,那么列不會(huì)繼承與數(shù)據(jù)類型綁定的規(guī)則。必須使用 sp_bindrule 專門將規(guī)則綁定到列。
將規(guī)則綁定到列時(shí),相關(guān)信息將添加到 syscolumns 表中。將規(guī)則綁定到用戶定義的數(shù)據(jù)類型時(shí),相關(guān)信息將添加到 systypes 表中。
只有 sysadmin 固定服務(wù)器角色、db_owner 和 db_ddladmin 固定數(shù)據(jù)庫(kù)角色成員及表所有者才能執(zhí)行 sp_bindrule。
假設(shè)已經(jīng)用 CREATE RULE 語(yǔ)句在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建名為 today 的規(guī)則,此示例將規(guī)則綁定到 employees 表的 hire date 列。將行添加到 employees 時(shí),按照 today 規(guī)則檢查 hire date 列的數(shù)據(jù)。
USE master
EXEC sp_bindrule 'today', 'employees.[hire date]'
假設(shè)存在名為 rule_ssn 的規(guī)則和名為 ssn 的用戶定義數(shù)據(jù)類型,此示例將 rule_ssn 綁定到 ssn。在 CREATE TABLE 語(yǔ)句中,類型 ssn 的列繼承 rule_ssn 規(guī)則。類型 ssn 的現(xiàn)有列也繼承 rule_ssn 規(guī)則,除非為 futureonly_flag 指定了 futureonly 或者在 ssn 上直接綁定了規(guī)則。綁定到列的規(guī)則始終優(yōu)先于綁定到數(shù)據(jù)類型的規(guī)則。
USE master
EXEC sp_bindrule 'rule_ssn', 'ssn'
此示例將 rule_ssn 規(guī)則綁定到用戶定義數(shù)據(jù)類型 ssn。因?yàn)橐阎付?futureonly,所以不影響類型 ssn 的現(xiàn)有列。
USE master
EXEC sp_bindrule 'rule_ssn', 'ssn', 'futureonly'
此示例顯示了在 object_name 中分隔標(biāo)識(shí)符的使用。
USE master相關(guān)文章
CREATE TABLE [t.2] (c1 int)
-- Notice the period as part of the table name.
EXEC sp_binderule 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.