p; EXEC sp_unbindefault ''''authors.phone'''' DROP DEFAULT phonedflt END GOsp_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_owner 和 db_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.
六、sp_unbindrule 在当前数据库中为列或用户定义数据类型解除规则绑定。
语法 sp_unbindrule [@objname =] ''''object_name'''' [, [@futureonly =] ''''futureonly_flag'''']
参数 [@objname =] ''''object_name''''
是要解除规则绑定的表和列或者用户定义数据类型的名称。object_name 的数据类型为 nvarchar(776),无默认值。如果参数不是 table.column 的形式,则假定 object_name 为用户定义数据类型。当为用户定义数据类型解除规则绑定时,所有属于该数据类型并具有相同规则的列也同时解除规则绑定。对属于该数据类型的列,如果其规则直接绑定到列上,则该列不受影响。
说明 object_name 中可以含有 [ and ] 字符作为分隔标识符。有关更多信息,请参见分隔标识符。
[@futureonly =] ''''futureonly_flag''''
仅用于解除用户定义数据类型规则的绑定。futureonly_flag 的数据类型为 varchar(15),其默认值为 NULL。当参数 futureonly_flag 为 futureonly 时,现有的属于该数据类型的列不会失去指定规则。
返回代码值 0(成功)或 1(失败)
注释 若要显示某条规则的文本,请以该规则的名称作为参数来执行存储过程 sp_helptext。
解除规则绑定时,如果规则绑定到列,则绑定信息从表 syscolumns 中删除。如果规则绑定到用户定义数据类型,则绑定信息从表 systypes 中删除。
当从用户定义数据类型解除规则绑定时,任何具有该用户定义数据类型的列也同时解除该规则的绑定。对于后来用 ALTER TABLE 语句的 ALTER COLUMN 子句更改了数据类型的列,该规则仍可能绑定在该列上,必须使用存储过程 sp_unbindrule(并指定列名)明确地从这些列中解除规则绑定。
权限 只有 sysadmin 固定服务器角色、db_owner 和 db_ddladmin 固定数据库角色的成员以及表所有者才能执行 sp_unbindrule。
示例 A. 为列解除规则绑定 下例为表 employees 的 startdate 列解除规则绑定。
EXEC sp_unbindrule ''''employees.startdate''''
B. 为用户定义数据类型解除规则绑定 下例为用户定义数据类型 ssn 解除规则绑定。这将为该数据类型的现有列和将来的列解除规则绑定。
EXEC sp_unbindrule ssn
C. 使用 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''''
七、sp_addtype 创建用户定义的数据类型。
语法 sp_addtype [ @typename = ] type, [ @phystype = ] system_data_type [ , [ @nulltype = ] ''''null_type'''' ] [ , [ @owner = ] ''''owner_name'''' ]
参数 [@typename =] type
用户定义的数据类型的名称。数据类型名称必须遵照标识符的规则,而且在每个数据库中必须是唯一的。type 的数据类型为 sysname,没有默认值。
[@phystype =] system_data_type
是用户定义的数据类型所基于的物理数据类型或 Microsoft® SQL Server™ 提供的数据类型(decimal、int 等等)。system_data_type 的数据类型是 sysname,没有默认值,可能是这些值之一:
''''binary( n )'''' image smalldatetime Bit int smallint ''''char( n )'''' ''''nchar( n )'''' text Datetime ntext tinyint Decimal numeric uniqueidentifier ''''decimal[ ( p [, s ] ) ]'''' ''''numeric[ ( p [ , s ] ) ]'''' ''''varbinary( n )'''' Float ''''nvarchar( n )'''' ''''varchar( n )'''' ''''float( n )'''' real
如果参数中嵌入有空格或标点符号,则必须用引号将该参数引起来。有关可用的数据类型的更多信息,请参见数据类型。
n 非负整数,指明所选数据类型的长度。
p 非负整数,指明可保留的最大十进制位数,包括小数点左边和右边的数字。有关更多信息,请参见 decimal 和 numeric。
s 非负整数,指明小数点右边的小数数字可保留的最大十进制位数,它必须小于或等于精度值。有关更多信息,请参见本卷中的"decimal 和 numeric"。 [@nulltype =] ''''null_type''''
指明用户定义的数据类型处理空值的方式。null_type 的数据类型为 varchar(8),默认值为 NULL,并且必须用单引号引起来(''''NULL''''、''''NOT NULL'''' 或 ''''NONULL'''')。如果没有用 sp_addtype 显式定义 null_type,则将其设置为当前默认的为空性。使用 GETANSINULL 系统函数可确定当前默认的为空性,可以使用 SET 语句或 sp_dboption 对该为空性进行调整。应显式定义为空性。
说明 null_type 参数只为该数据类型定义默认的为空性。如果在创建表的过程中使用用户定义的数据类型时显式地定义了为空性,那么该为空性优先于已定义好的为空性。有关更多信息,请参见 ALTER TABLE 和 CREATE TABLE。
[@owner =] ''''owner_name''''
指定新数据类型的创建者或所有者。owner_name 的数据类型为 sysname。当没有指定时,owner_name 为当前用户。
返回代码值 0(成功)或 1(失败)
结果集 无
注释 用户定义的数据类型名称在数据库中必须是唯一的,但是名称不同的用户定义的数据类型可以有相同的定义。
除非将 master 作为当前数据库来执行 sp_addtype,否则,执行 sp_addtype 会创建用户定义的数据类型,并且将其添加到某个特定数据库的 systypes 系统表中。如果想在所有新的用户定义的数据库中都可以使用这一用户定义的数据类型,请将其添加到 model。在创建了用户数据类型之后,可以在 CREATE TABLE 或 ALTER TABLE 中使用它,也可以将默认值和规则绑定到用户定义的数据类型。
不能使用 SQL Server timestamp 数据类型来定义用户定义的数据类型。
权限 执行权限默认授予 public 角色。
示例 A. 创建不允许空值的用户定义数据类型 下面的示例创建一个名为 ssn(社会保险号)的用户定义数据类型,它基于 SQL Server 提供的 varchar 数据类型。ssn 数据类型用于那些保存 11 位数字的社会保险号 (999-99-9999) 的列。该列不能为 NULL。
请注意,varchar(11) 由单引号引了起来,这是因为它包含了标点符号(圆括号)。
USE master EXEC sp_addtype ssn, ''''VARCHAR(11)'''', ''''NOT NULL''''
B. 创建允许空值的用户定义数据类型 下面的示例创建了一个名为 birthday 的用户定义数据类型(基于 datetime),该数据类型允许空值。
USE master EXEC sp_addtype birthday, datetime, ''''NULL''''
C. 创建另外的用户定义的数据类型 下面的示例为国内及国际电话和传真号码另外创建两个用户定义的数据类型 telephone 和 fax。
USE master EXEC sp_addtype telephone, ''''varchar(24)'''', ''''NOT NULL'''' EXEC sp_addtype fax, ''''varchar(24)'''', ''''NULL''''
八、sp_droptype 从 systypes 删除用户定义的数据类型。
语法 sp_droptype [ @typename = ] ''''type''''
参数 [@typename =] ''''type''''
您所拥有的用户定义数据类型的名称。type 的数据类型为 sysname,没有默认值。
返回代码类型 0(成功)或 1(失败)
结果集 无
注释 如果表或其它数据库对象引用 type 用户定义数据类型,那么就不能除去这种数据类型。
说明 如果在表定义内使用某个用户定义的数据类型,或者将某个规则或默认值绑定到这种数据类型,那么就不能除去它。
权限 执行权限默认授予 sysadmin 固定服务器角色、db_ddladmin 和 db_owner 固定数据库角色成员以及数据类型所有者。
示例 下面的示例除去用户定义的数据类型 birthday。
说明 该用户定义的数据类型必须已经存在,否则下面的示例会返回一条错误信息。
USE master EXEC sp_droptype ''''birthday''''
上一页 [1] [2] [Access]sql随机抽取记录 [Access]ASP&SQL让select查询结果随机排序的实现方法 [系统软件]SQL语句性能优化--LECCO SQL Expert [C语言系列]SQL Server到DB2连接服务器的实现 [C语言系列]SQL Server到SYBASE连接服务器的实现 [C语言系列]SQL Server到SQLBASE连接服务器的实现 [C语言系列]SQL Server连接VFP数据库的实现 [C语言系列]ASP+SQL Server之图象数据处理 [C语言系列]SQL Server连接ACCESS数据库的实现 [C语言系列]DBA的最佳选择—图形界面还是T-SQL命令?
|