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