sp_unbindrule (Transact-SQL)

适用于:SQL Server

在当前数据库中取消列或别名数据类型的规则绑定。

重要

在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 建议改用 ALTER TABLE 或 CREATE TABLE 语句中的 DEFAULT 关键字 (keyword)来创建默认定义。

Transact-SQL 语法约定

语法

sp_unbindrule
    [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

参数

[ @objname = ] N'objname'

表和列的名称或规则从中取消绑定的别名数据类型。 @objname为 nvarchar(776),没有默认值。 SQL Server 尝试先将两部分标识符解析为列名,然后再解析为别名数据类型。 在取消别名数据类型的规则绑定时,也同时取消数据类型相同并具有相同规则的任何列的绑定。 属于该数据类型并且规则直接绑定的列将不受影响。

注意

@objname可以包含带分隔符的括号[]。 有关详细信息,请参阅 Database Identifiers

[ @futureonly = ] 'futureonly'

仅在从别名数据类型取消绑定规则时使用。 @futureonly为 varchar(15),默认值为 NULL. 当@futureonlyfutureonly,该数据类型的现有列不会丢失指定的规则。

返回代码值

0(成功)或 1(失败)。

注解

若要显示规则的文本,请使用规则名称作为参数执行 sp_helptext

当规则未绑定时,如果规则绑定到列,则从表中删除 sys.columns 有关绑定的信息;如果规则绑定到别名数据类型, sys.types 则从表中删除。

当规则从别名数据类型中取消绑定时,该规则也不受具有该别名数据类型的任何列的绑定。 该规则还可能仍绑定到其数据类型后来由 ALTER TABLE 语句的 ALTER COLUMN 子句更改的列,您必须通过使用和指定列名来明确取消这些列 sp_unbindrule 的规则绑定。

权限

若要取消表列的规则绑定,需要对表具有 ALTER 权限。 若要取消别名数据类型的规则绑定,需要对该类型具有 CONTROL 权限或对该类型所属的架构具有 ALTER 权限。

示例

A. 从列取消绑定规则

以下示例取消 startdate 表的 employees 列的规则绑定。

EXEC sp_unbindrule 'employees.startdate';

B. 从别名数据类型取消绑定规则

以下示例取消别名数据类型 ssn 的规则绑定。 这将从属于该数据类型的现有列和将来的列取消规则绑定。

EXEC sp_unbindrule ssn;

°C 使用futureonly_flag

以下示例取消别名数据类型 ssn 的规则绑定,而不影响现有 ssn 列。

EXEC sp_unbindrule 'ssn', 'futureonly';

D. 使用带分隔符的标识符

以下示例演示如何在 @objname 参数中使用带分隔符的标识符。 请注意作为表名的一部分的句点。 在 sp_bindrule 部分中,对象包含两个句点;第一个句点是表名的一部分,第二个句点将表名与列名区分开来。

CREATE TABLE [t.4] (c1 int);
GO
CREATE RULE rule2 AS @value > 100;
GO
EXEC sp_bindrule rule2, '[t.4].c1'
GO
EXEC sp_unbindrule '[t.4].c1';