Transact-SQL 参考

sp_bindrule

将规则绑定到列或用户定义的数据类型。

语法

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

参数

[@rulename =] 'rule'

由 CREATE RULE 语句创建的规则名称。rule 的数据类型为 nvarchar(776),无默认值。

[@objname =] 'object_name'

绑定了规则的表和列或用户定义的数据类型。object_name 的数据类型为 nvarchar(517),无默认值。如果 object_name 没有采取 table.column 格式,则认为它属于用户定义数据类型。默认情况下,用户定义的数据类型的现有列继承 rule,除非直接在列上绑定了规则。

说明  object_name 中可以含有 [ and ] 字符作为分隔标识符。有关更多信息,请参见分隔标识符

[@futureonly =] 'futureonly_flag'

仅当将规则绑定到用户定义的数据类型时才使用。future_only_flag 的数据类型为 varchar(15),默认值为 NULL。将此参数在设置为 futureonly 时,它会防止用户定义数据类型的现有列继承新规则。如果 futureonly_flag 为 NULL,那么新规则将绑定到用户定义数据类型的每一列,条件是此数据类型当前无规则或者使用用户定义数据类型的现有规则。

返回代码值

0(成功)或 1(失败)

注释

可以使用 sp_bindrule 在不取消绑定现有规则的情况下,将新规则绑定到列(尽管最好使用 CHECK 约束)或者用户定义的数据类型。替代原有规则。如果使用现有 CHECK 约束将规则绑定到列,那么将评估所有限制。不能将规则绑定到 Microsoft® SQL Server™ 数据类型。

当试图执行 INSERT 语句时(不是在绑定时),将强行执行规则。尽管此处 INSERT 非法,仍然可以将字符规则绑定到 numeric 数据类型的列。

除非将 futureonly_flag 指定为 futureonly,否则用户定义数据类型的现有列将继承新规则。使用用户定义数据类型定义的新列始终继承规则。但是,如果 ALTER TABLE 语句的 ALTER COLUMN 子句将列的数据类型更改为绑定规则的用户定义数据类型,那么列不会继承与数据类型绑定的规则。必须使用 sp_bindrule 专门将规则绑定到列。

将规则绑定到列时,相关信息将添加到 syscolumns 表中。将规则绑定到用户定义的数据类型时,相关信息将添加到 systypes 表中。

权限

只有 sysadmin 固定服务器角色、db_ownerdb_ddladmin 固定数据库角色成员及表所有者才能执行 sp_bindrule

示例
A. 将规则绑定到列

假设已经用 CREATE RULE 语句在当前数据库中创建名为 today 的规则,此示例将规则绑定到 employees 表的 hire date 列。将行添加到 employees 时,按照 today 规则检查 hire date 列的数据。

USE master
EXEC sp_bindrule 'today', 'employees.[hire date]'
B. 将规则绑定到用户定义的数据类型

假设存在名为 rule_ssn 的规则和名为 ssn 的用户定义数据类型,此示例将 rule_ssn 绑定到 ssn。在 CREATE TABLE 语句中,类型 ssn 的列继承 rule_ssn 规则。类型 ssn 的现有列也继承 rule_ssn 规则,除非为 futureonly_flag 指定了 futureonly 或者在 ssn 上直接绑定了规则。绑定到列的规则始终优先于绑定到数据类型的规则。

USE master
EXEC sp_bindrule 'rule_ssn', 'ssn'
C. 使用 futureonly_flag

此示例将 rule_ssn 规则绑定到用户定义数据类型 ssn。因为已指定 futureonly,所以不影响类型 ssn 的现有列。

USE master
EXEC sp_bindrule 'rule_ssn', 'ssn', 'futureonly'
D. 使用分隔标识符

此示例显示了在 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.

请参见

CREATE RULE

DROP RULE

sp_unbindrule

系统存储过程