WRITETEXT (Transact-SQL)

允许对现有的 text、ntext 或 image 列执行最小日志记录的交互式更新。 WRITETEXT 将覆盖受其影响的列中的所有现有数据。 WRITETEXT 语句不能用于视图中的 text、ntext 和 image 列。

重要说明重要提示

后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。请改用大值数据类型和 UPDATE 语句的 .WRITE 子句。

适用范围:SQL Server(SQL Server 2008 到当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

WRITETEXT [BULK]
  { table.column text_ptr }
  [ WITH LOG ] { data }

参数

  • BULK
    启用上载工具来上载二进制数据流。 该数据流必须由该工具在 TDS 协议级别提供。 在数据流不存在时,查询处理器将忽略 BULK 选项。

    重要说明重要提示

    我们建议不要在基于 SQL Server 的应用程序中使用 BULK 选项。未来版本的 SQL Server 可能会更改或删除该选项。

  • table . column
    要更新的表和 text、ntext 或 image 列的名称。 表和列的名称必须符合标识符规则。 指定数据库名和所有者名是可选的。

  • text_ptr
    存储指向 text、ntext 或 image 数据的指针的值。 text_ptr 必须是 binary(16)。若要创建文本指针,请对非空值的 text、ntext 或 image 列数据执行 INSERTUPDATE 语句。

  • WITH LOG
    SQL Server 忽略此参数。 日志记录由数据库的当前恢复模式决定。

  • data
    要存储的实际 text、ntext 或 image 数据。 data 可以是文字或参数。 对于 text、ntext 和 image 数据,可以使用 WRITETEXT 以交互方式插入的最大文本长度约为 120 KB。

注释

请使用 WRITETEXT 替换 text、ntext 和 image 数据,并使用 UPDATETEXT 修改 text、ntext 和 image 数据。 UPDATETEXT 更加灵活,因为它只更改 text、ntext 或 image 列的一部分而非整个列。

为获得最佳性能,推荐以 8040 字节整数倍的块区大小,插入或更新 text、ntext 和 image 数据。

如果数据库为简单模式或大容量日志恢复模式,则在插入或追加新数据时,使用 WRITETEXT 语句的 text、ntext 和 image 操作将成为最小日志记录操作。

备注

在更新现有值时,不使用最小日志记录。

为了正确使用 WRITETEXT,列必须已经包含有效的文本指针。

如果该表没有行内文本,则在通过 INSERT 向 text 列中添加显式或隐式空值时,SQL Server 不初始化 text 列以节省空间,并且不能获取这类空值的文本指针。 若要将 text 列初始化为 NULL,请使用 UPDATE 语句。 如果表有行内文本,则不必为空值初始化文本列,而且始终可以获取文本指针。

ODBC SQLPutData 函数更快,且使用的动态内存比 WRITETEXT 少。 该函数可插入最多 2 GB 的 text、ntext 或 image 数据。

在 SQL Server 中,可能存在指向 text、ntext 或 image 数据的行文本指针,但可能无效。 有关 text in row 选项的信息,请参阅 sp_tableoption (Transact-SQL)。 有关使文本指针失效的信息,请参阅 sp_invalidate_textptr (Transact-SQL)

权限

需要对指定表的 UPDATE 权限。 可在转移 UPDATE 权限时转移这些权限。

示例

以下示例将文本指针放到局部变量 @ptrval 中,然后 WRITETEXT 将新的文本字符串放到 @ptrval 指向的行中。

备注

若要运行该示例,必须安装 pubs 示例数据库。

USE pubs;
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(pr_info) 
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id 
   AND p.pub_name = 'New Moon Books'
WRITETEXT pub_info.pr_info @ptrval 'New Moon Books (NMB) has just released another top ten publication. With the latest publication this makes NMB the hottest new publisher of the year!';
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO

请参阅

参考

数据类型 (Transact-SQL)

DECLARE @local\_variable (Transact-SQL)

DELETE (Transact-SQL)

SELECT (Transact-SQL)

SET 语句 (Transact-SQL)

UPDATETEXT (Transact-SQL)