sp_tableoption (Transact-SQL)
更新日期: 2006 年 12 月 12 日
设置用户定义表的选项值。sp_tableoption 可用于控制包含 varchar(max)、nvarchar(max)、varbinary(max)、xml、text、ntext 或 image 列的表的行内行为。
重要提示: |
---|
在 SQL Server 的将来版本中,将删除 text in row 功能。若要存储大值数据,建议您使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型。 |
语法
sp_tableoption [ @TableNamePattern = ] 'table' , [ @OptionName = ] 'option_name' , [ @OptionValue = ] 'value'
参数
- [ @TableNamePattern = ] 'table'
用户定义数据库表的限定名称或非限定名称。如果提供了包含数据库名称的完全限定表名,则数据库名称必须为当前数据库的名称。不能同时设置多个表的表选项。table_pattern 的数据类型为 nvarchar(776),无默认值。
[ @OptionName = ] 'option_name'
表选项名称。option_name 的数据类型为 varchar(35),无默认值 NULL。option_name 可以是下列值之一。值 说明 table lock on bulk load
禁用时(默认值),使用户定义表的大容量处理获得行锁。启用时,使用户定义表的大容量处理获得大容量更新锁。
insert row lock
SQL Server 2005 不支持。
SQL Server 的锁定策略为行锁定,并可能提升为页锁定或表锁定。此选项对 SQL Server 的锁定行为没有影响,保留此选项只是为了与现有脚本和过程兼容。
text in row
如果为 OFF 或 0(禁用,默认值),则不更改当前行为,且在行中不存在 BLOB。
如果指定此值,并且 @OptionValue 设置为 ON(启用)或者是 24 到 7000 之间的一个整数值,则在数据行中直接存储新的 text、ntext 或 image 字符串。如果更新了 BLOB 值,则现有的所有 BLOB(二进制大型对象:text、ntext 或 image 数据)都将改为 text in row 格式。有关详细信息,请参阅“备注”。
large value types out of row
1 = 表中的 varchar(max)、nvarchar(max)、varbinary(max) 和 xml 列都存储在行外,用一个 16 个字节的指针指向根目录。
0 = varchar(max)、nvarchar(max)、varbinary(max) 和 xml 值直接存储在数据行中(最大限制为 8000 字节,并且只要记录中可以容纳该值)。如果记录中容纳不下该值,则指针存储在行内,其余内容存储在 LOB 存储空间内的行外。
vardecimal storage format
为 TRUE、ON 或 1 时,将为 vardecimal 存储格式启用指定的表。为 FALSE、OFF 或 0 时,将不为 vardecimal 存储格式启用该表。只有使用 sp_db_vardecimal_storage_format 为 vardecimal 存储格式启用数据库后,才能启用 vardecimal 存储格式。有关 vardecimal 存储格式的信息,请参阅将 Decimal 数据存储为可变长度类型。此选项需要 SQL Server 2005 Service Pack 2。只有 SQL Server 2005 Enterprise Edition、Developer Edition 和 Evaluation Edition 支持 Vardecimal 存储格式。
[ @OptionValue = ] 'value'
指示 option_name 被启用(true、on 或 1)还是禁用(false、off 或 0)。value 的数据类型为 varchar(12),无默认值。value 不区分大小写。对于 text in row 选项,有效选项值是 0、on、off,或从 24 到 7000 的整数。value 为 on 时,默认限制为 256 字节。
返回代码值
0(成功)或错误号(失败)
备注
sp_tableoption 仅可用于设置用户定义表的选项值。若要显示表属性,请使用 OBJECTPROPERTY。
sp_tableoption 中的 text in row 选项只能在包含文本列的表中启用或禁用。如果表不含文本列,SQL Server 将引发错误。
如果启用了 text in row 选项,@OptionValue 参数将允许用户为 BLOB 指定可在行中存储的最大大小。默认值为 256 字节,但是值可以介于 24 到 7000 个字节之间。
在满足以下条件时,数据行可以存储 text、ntext 或 image 字符串:
- 启用了 text in row。
- 字符串的长度比 @OptionValue 中指定的限制值短。
- 数据行中有足够的可用空间。
数据行中存储 BLOB 字符串时,读取和写入 text、ntext 或 image 字符串可以与读取或写入字符和二进制字符串一样快。SQL Server 不必访问不同的页,就可读取或写入 BLOB 字符串。
如果 text、ntext 或 image 字符串比所指定的限制或行中的可用空间大,则行中将存储指针。尽管需要满足以下条件,但是在行中存储 BLOB 字符串的条件仍然适用:数据行中必须有足够的空间来存放指针。
存储在表行中的 BLOB 字符串和指针被视为类似于可变长度字符串。SQL Server 仅使用存储字符串或指针所需的字节数。
如果先启用了 text in row,则不会立即转换现有的 BLOB 字符串。仅当字符串被更新时才将其转换。同样,如果增加了 text in row 选项限制,则在更新数据行中已有的 text、ntext 或 image 字符串之前,不对其转换以遵从新限制。
注意: |
---|
禁用 text in row 选项或减少该选项的限制需要转换所有的 BLOB,因此,进程可能较长,具体取决于必须转换的 BLOB 字符串数。在转换过程中,表将被锁定。 |
table 变量(包括返回 table 变量的函数)将自动启用 text in row 选项,并将 inline limit 值默认为 256 字节。此选项不可更改。
text in row 支持 TEXTPTR、WRITETEXT、UPDATETEXT 和 READTEXT 函数。用户可以使用 SUBSTRING() 函数读取部分 BLOB,但是必须记住,各个行内文本指针之间具有不同的持续时间和数量限制。有关详细信息,请参阅 管理 ntext、text 和 image 数据。
若要将表从 vardecimal 存储格式改回到十进制存储格式,数据库必须处于 SIMPLE 恢复模式。更改恢复模式将断开用于备份目的的日志链,因此在从表中删除 vardecimal 存储格式后,应当创建完整数据库备份。
权限
执行 sp_tableoption 要求具有表的 ALTER 权限。
示例
A. 将 xml 数据存储在行外
以下示例指定了将 HumanResources.JobCandidate
表中的 xml 数据存储在行外。
USE AdventureWorks;
GO
EXEC sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;
B. 在表中启用 vardecimal 存储格式
以下示例修改了 Production.WorkOrderRouting
表从而以 vardecimal 存储格式存储 decimal 数据类型。
USE master;
GO
-- The database must be enabled for vardecimal storage format
-- before a table can be enabled for vardecimal storage format.
EXEC sp_db_vardecimal_storage_format 'AdventureWorks', 'ON';
GO
USE AdventureWorks;
GO
EXEC sp_tableoption 'Production.WorkOrderRouting',
'vardecimal storage format', 'ON';
请参阅
参考
sys.tables (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
系统存储过程 (Transact-SQL)
数据库引擎存储过程 (Transact-SQL)
其他资源
帮助和信息
更改历史记录
发布日期 | 历史记录 |
---|---|
2006 年 12 月 12 日 |
|