您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_bindrule

说明

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

语法


sp_bindrule <rulename>, <objname>[, futureonly]

参数

<rulename>

是规则的名称。用 create rule 语句创建规则,并用 sp_bindrule 将规则绑定到特定的列或用户定义的数据类型。

<objname>

是要向其绑定规则的表和列或用户定义的数据类型的名称。如果 的形式不是“

.”,则它将被认为是用户定义的数据类型。如果对象名包含嵌入的空格或标点符号,或者对象名是保留字,则用引号将它引起来。

futureonly

禁止用户定义的数据类型的现有列继承新规则。当您将规则绑定到用户定义的数据类型时,此参数是可选的。如果将规则绑定到列,则此参数无意义。

示例

示例 1

假设已用 create rule 在当前数据库中创建了名为 today 的规则,此命令将其绑定到 employees 表的 startdate 列。当将行添加到 employees 时,将根据规则 today 检查 startdate 列的数据:


sp_bindrule today, "employees.startdate"

示例 2

假设存在名为 rule_ssn 的规则和名为 ssn 的用户定义的数据类型,此命令会将 rule_ssn 绑定到 ssn。在 create table 语句中,类型为 ssn 的列继承规则 rule_ssn。除非以前已更改过 ssn 的规则,否则类型为 ssn 的现有列也继承规则 rule_ssn(在这种情况下,更改后的规则仅在以后维护):


sp_bindrule rule_ssn, ssn

示例 3

将规则 rule_ssn 绑定到用户定义数据类型 ssn,但类型为 ssn 的任何现有列都不受影响。futureonly 禁止类型为 ssn 的现有列继承该规则:


sp_bindrule rule_ssn, ssn, futureonly

用法

使用 sp_bindrule 时,还存在一些其它注意事项:

  • 使用 create rule 语句创建规则。然后执行 sp_bindrule 将其绑定到当前数据库中的列或用户定义的数据类型。

  • 当尝试执行 insert(而不是执行 sp_bindrule 时),将强制执行规则。您可以将字符规则绑定到数据类型为精确数值或近似数值的列,即使这样的 insert 并不合法。

  • 不能使用 sp_bindrule 为 create table 语句中的列绑定检查约束。

  • 不能将规则绑定到 SAP ASE 服务器提供的数据类型,或绑定到 text 或 image 列。

  • 不能将规则绑定到系统表。

  • 无法将规则绑定到计算列。

  • 如果绑定到列, 参数的形式必须是“
.”。任何其它格式都将被认为是用户定义的数据类型的名称。

  • 使用规则的语句不能和它们的 sp_bindrule 语句位于同一个批处理中。

  • 可以将规则绑定到列或用户定义的数据类型,而无需解除现有规则的绑定。绑定到列的规则始终比绑定到数据类型的规则具有更高的优先级。将规则绑定到列后,将替换已绑定到该列的数据类型的规则。但是,如果将规则绑定到数据类型,则不会替换已绑定到该用户定义的数据类型的列的规则。

  • 除非以前更改过列的规则或者可选的第三个参数的值是 futureonly,否则用户定义的数据类型的现有列将继承新规则。用户定义的数据类型的新列始终继承该规则。