WRITETEXT (Transact-SQL)
允许对现有的 text、ntext 或 image 列执行最小日志记录的交互式更新。WRITETEXT 将覆盖受其影响的列中的所有现有数据。WRITETEXT 语句不能用于视图中的 text、ntext 和 image 列。
重要提示: |
---|
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 请改用大值数据类型以及 UPDATE 语句的 .WRITE 子句。 |
语法
WRITETEXT { table.column text_ptr }
[ WITH LOG ] { data }
参数
- table**.column**
要更新的表的名称以及 text、ntext 或 image 列的名称。表和列的名称必须符合标识符规则。指定数据库名和所有者名是可选的。
- text_ptr
存储指向 text、ntext 或 image 数据的指针的值。text_ptr 必须是 binary(16)。若要创建文本指针,请对非空值的 text、ntext 或 image 列数据执行 INSERT 或 UPDATE 语句。
- 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 千兆的 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 示例数据库。有关如何安装 pubs 示例数据库的信息,请参阅下载 Northwind 和 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)