为用户定义表设置选项值。sp_tableoption 可以用来在具有 text、ntext 或 image 列的表上启用 text in row 功能。
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 可以有下列值。
值 | 描述 |
---|---|
pintable | 当禁用时(默认值),它将表标记为不再驻留内存。启用时,将表标记为驻留内存。 |
table lock on bulk load | 禁用时(默认值),用户定义表的大容量处理获得行锁。启用时,用户定义表的大容量处理获得大容量更新锁。 |
insert row lock | Microsoft® SQL Server™ 2000 中不支持该值。
对于 SQL Server 6.5 版而言,在指定表上启用或禁用插入行锁定 (IRL) 操作。在 SQL Server 7.0 中,行级锁定默认为启用。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 格式。有关更多信息,请参见注释部分。 |
[ , [ @OptionValue = ] 'value' ]
表示是启用 option_name(true、on 或 1)还是禁用 option_name(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(二进制大对象:text、ntext 或 image 数据)的最大值。默认设置是 256 字节,但是行中的值可以在 24 到 7000 字节范围内变化。
如果应用下列条件,则将 text、ntext 或 image 字符串存储在数据行中:
当 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 选项,并具备 256 字节的 inline limit 默认值。这一选项不可更改。
text in row 支持 TEXTPTR、WRITETEXT、UPDATETEXT 和 READTEXT 函数。用户可以使用 SUBSTRING() 函数读取 BLOB 的部分,但是必须记住,行内文本指针与其它文本指针相比有不同的有效期和个数限制。有关更多信息,请参见管理 ntext、text 和 image 数据。
只有 sysadmin 固定服务器角色的成员可以修改表选项 pintable。
sysadmin 固定服务器角色成员,db_owner 和 db_ddladmin 固定数据库角色成员以及表所有者,都可以修改任何用户定义表的 table lock on bulk load 和 text in row 选项。其他用户只能修改自己拥有的表的选项。
EXEC sp_tableoption 'orders', 'text in row', 'ON'
EXEC sp_tableoption 'orders', 'text in row', '1000'
sp_tableoption 'orders', 'text in row', '23'
会产生错误信息,提示参数超出范围。
EXEC sp_tableoption 'orders', 'text in row', 'off'
-或-
EXEC sp_tableoption 'orders', 'text in row', '0'