sp_unbindrule (Transact-SQL)
在当前数据库中取消列或别名数据类型的规则绑定。
重要提示 |
---|
下一版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。建议您改为在 ALTER TABLE 或 CREATE TABLE 语句中使用 DEFAULT 关键字来创建默认定义。 |
适用范围:SQL Server(SQL Server 2008 到当前版本)。 |
语法
sp_unbindrule [ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
参数
[ @objname= ] 'object_name'
要取消规则绑定的表和列或别名数据类型的名称。 object_name 的数据类型为 nvarchar(776),无默认值。 SQL Server 尝试先将两部分标识符解析为列名,再解析为别名数据类型。 在取消别名数据类型的规则绑定时,也同时取消数据类型相同并具有相同规则的任何列的绑定。 属于该数据类型并且规则直接绑定的列将不受影响。备注
object_name 可以包含方括号 [] 作为分隔标识符。有关详细信息,请参阅数据库标识符。
[ @futureonly= ] 'futureonly_flag'
仅在取消别名数据类型的规则绑定时使用。 futureonly_flag 的数据类型为 varchar(15),默认值为 NULL。 当 futureonly_flag 的数据类型为 futureonly 时,该数据类型的现有列不会失去指定的规则。
返回代码值
0(成功)或 1(失败)
注释
若要显示某条规则的文本,请以该规则的名称作为参数来执行 sp_helptext。
在取消规则绑定时,如果规则绑定到列,则从表 sys.columns 中删除绑定信息;如果规则绑定到别名数据类型,则从表 sys.types 中删除绑定信息。
当取消别名数据类型的规则绑定时,任何具有该别名数据类型的列也同时取消该规则绑定。 对于后来用 ALTER TABLE 语句的 ALTER COLUMN 子句更改了其数据类型的列,该规则仍可能绑定在该列上,必须通过使用 sp_unbindrule 并指定该列名明确地从这些列中取消规则绑定。
权限
若要取消表列的规则绑定,需要对表具有 ALTER 权限。 若要取消别名数据类型的规则绑定,需要对该类型具有 CONTROL 权限或对该类型所属的架构具有 ALTER 权限。
示例
A.取消列的规则绑定
以下示例取消 employees 表的 startdate 列的规则绑定。
EXEC sp_unbindrule 'employees.startdate';
B.取消别名数据类型的规则绑定
以下示例取消别名数据类型 ssn 的规则绑定。 这将从属于该数据类型的现有列和将来的列取消规则绑定。
EXEC sp_unbindrule ssn;
C.Using futureonly_flag
以下示例取消别名数据类型 ssn 的规则绑定,而不影响现有 ssn 列。
EXEC sp_unbindrule 'ssn', 'futureonly';
D.使用分隔标识符
下面的示例演示如何在 object_name 参数中使用分隔标识符。
CREATE TABLE [t.4] (c1 int); -- Notice the period as part of the table
-- name.
GO
CREATE RULE rule2 AS @value > 100;
GO
EXEC sp_bindrule rule2, '[t.4].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.
GO
EXEC sp_unbindrule '[t.4].c1';