发布网友
共3个回答
热心网友
你可以考虑禁用 text in row 选项:
sp_tableoption N 'MyTable ', 'text in row ', 'OFF '
这时sql2000的资料,2005也差不多
Text in Row 数据
Microsoft® SQL Server™ 2000 支持在数据行中存储小型到中等的 text、ntext 和 image 值。该功能最适于这样的表:text、ntext 和 image 列中的数据通常读取或写入一个单元,并且大多数引用该表的语句都使用 text、ntext 和 image 数据。
除非指定 text in row 选项,否则 text、ntext 或 image 字符串为存储在数据行外的大型(最大 2GB)字符串或二进制字符串。数据行只包括一个 16 字节的文本指针,该指针指向一个树的根节点,该树由映射存储串片段的页的内部指针构成。有关 text、ntext 或 image 字符串存储的更多信息,请参见 text、ntext 和 image 数据。
可为包含 text、ntext 或 image 列的表设置 text in row 选项。还可以指定 text in row 选项*,从 24 到 7,000 字节。如果设置了该选项,则在下列情况下,text、ntext 或 image 字符串直接存储在数据行中:
字符串的长度比指定的长度*短。
数据行中有足够的可用空间容纳字符串。
当 text、ntext 或 image 串被存储在数据行时,SQL Server 就无须访问单独的页或页的集合来读写这些串。这使得读写 text、ntext 或 image 这些行中的串就象读写 varchar、 nvarchar 或 varbinary 串一样快。
如果 text、ntext 或 image 字符串的长度比 text in row 选项的*或行中的可用空间长,则本应存储在指针树根节点中的指针集将存储在行中。下列情况下,将指针存储在行中:
存储指针所需的空间量比 text in row 选项*指定的少。
数据行中有足够的可用空间容纳指针。
当指针从根节点移至行本身时,SQL Server 无须使用根节点。这可在读取或写入字符串时消除页访问,从而加快处理速度。
当使用根节点时,它们被存储为 text、ntext 或 image 页中的一个字符串片段,并且可最多容纳五个内部指针。SQL Server 的行需要 72 字节的空间存储行内字符串的五个指针。如果当 text in row 选项打开时行中没有足够的空间容纳指针,SQL Server 必须分配一个 8-K 页容纳它们。不应将 text in row *设置为小于 72 字节,除非确定存储在列中的所有字符串都较短或超过 3 MB。
当 text、ntext 或 image 字符串存储在行中时,它们的存储类似于长度可变的字符串。例如,如果 text in row 选项的*为 500 字节,则在行中存储一个 200 字节的字符串时,SQL Server 将只使用存储该字符串所需的字节数。如果插入的字符串比 500 字节长,因而指针存储在行中,则 SQL Server 只使用足够容纳指针的空间,而不是全部 500 字节。
如果某个表有多个 text、ntext 或 image 列,则当尝试插入多个 text、ntext 或 image 字符串时,SQL Server 将按基于列 ID 的顺序给这些字符串逐个分配空间。例如,假设有一个包含四个 text 列的表,并且将 text in row 选项的*设置为 1000。然后插入某行,而该行中每个 text 列都为 900 字节的字符串,并且有足够的数据用于表中的所有其它列,因此在行中只有 3,000 字节的可用空间容纳 text 字符串。前三个 text 列的字符串存储在行中,使用 3,000 可用字节中的 2,700 字节。第四个 text 列的字符串不存储在行中,但根节点的指针存储在行中。
启用和禁用 text in row 选项
可使用 sp_tableoption 为表启用 text in row 选项:
sp_tableoption N 'MyTable ', 'text in row ', 'ON '
或者,可以为可在数据行中存储的 text、ntext 和 image 字符串长度指定从 24 到 7.000 字节的最大*:
sp_tableoption N 'MyTable ', 'text in row ', '1000 '
如果指定的是 on 而不是一个特定的*,则此*的默认值为 256 字节。该默认值使您得以从 text in row 选项中获得最多的性能收益。尽管在通常情况下,不应将此值设为低于 72,但也不应把此值设得过高,特别是对那些大多数语句都不引用 text、ntext 和 image 列的表或者具有多个 text、ntext 和 image 列的表。如果设置了较大的 text in row *,且行本身存储了许多字符串,则可以显著减少存储在每页上的数据行数。如果大多数引用表的语句不访问 text、ntext 或 image 列,则减少页中的行数会增加处理查询时必须读取的页数。减少每页上的行数会增加索引及页的大小,优化器找不到可用的索引时可能需要扫描这些索引和页。text in row *的默认值 256 足以确保小型字符串和根文本指针存储在行中,同时不会使每页上的行减少得太多以至影响性能。
也可以使用 sp_tableoption 关闭此选项,这可以通过指定 off 或 0 选项值来实现:
sp_tableoption N 'MyTable ', 'text in row ', 'OFF '
text in row 选项的效果
text in row 选项具有下列效果:
打开 text in row 选项后,不能使用 READTEXT、UPDATETEXT 或 WRITETEXT 语句读取或修改存储在表中的任何 text、ntext 或 image 值的任何部分。在 SELECT 语句中可以读取整个 text、ntext 或 image 字符串,或者使用 SUBSTRING 函数读取部分字符串。所有引用表的 INSERT 或 UPDATE 语句必须指定完整的字符串,并且不能只修改 text、ntext 或 image 字符串的一部分。
当第一次启用 text in row 选项时,现有 text、ntext 或 image 字符串不会立即转换成行内字符串。仅当随后更新字符串时,这些字符串才转换成行内字符串。在打开 text in row 选项后插入的任何 text、ntext 或 image 字符串将作为行内字符串插入。
关闭 text in row 选项可能是长时间运行的日志记录操作。表被锁定且所有行内 text、ntext 和 image 字符串都转换成常规 text、ntext 和 image 字符串。运行命令所需的时间和需要修改的数据量,取决于必须从行内字符串转换成常规字符串的 text、ntext 和 image 字符串的数量。
text in row 选项不影响用于 SQL Server 的 OLE DB 提供程序或 SQL Server ODBC 驱动程序的操作,而只会加快访问 text、ntext 和 image 数据的速度。
打开 text in row 选项后,DB-Library text 和 image 函数(如 dbreadtext 和 dbwritetext)不能在表上使用。
下列各项的 text in row 选项自动设置成 256:
含有表数据类型的变量。
由返回 table 的用户定义函数所返回的表。
不能更改该设置。
热心网友
text类型可以存储最大4亿字节的文字,是很庞大的,你所说的存不了,是不是写入时的SQL语法错误,比如写入时是按照字符串写入的,而字符串是用单引号括起来的,如果字符串里面也有引号,就会出现语法错误。
你可以用两个引号('')替换字符串里面的所有单引号。
热心网友
举例说明