更改 ntext、text 或 image 数据

当替换所有值时,可以通过下列方法更新行中的 ntexttextimage 的值。

  • 像指定 charncharbinary 数据那样,在 UPDATE 语句中指定数量相对较少的数据。
  • 使用 WRITETEXT
  • ADO 应用程序可以使用 AppendChunk 方法指定较长的 ntexttextimage 数据。
  • OLE DB 应用程序可以使用 ISequentialStream 接口写入新的 ntexttextimage 值。有关详细信息,请参阅 BLOBs and OLE Objects
  • ODBC 应用程序可以使用 SQLPutData 执行时的数据格式写入新的 ntexttextimage 值。有关详细信息,请参阅Managing Text and Image Columns
  • DB-Library 应用程序可以使用 dbwritetext 函数。有关详细信息,请参阅文本与图像函数 (Transact-SQL)

SQL Server 2005 也支持仅更新 ntexttextimage 的值的一部分。在 DB-Library 中,可以使用 dbupdatetext 函数实现该操作。所有其他应用程序和 Transact-SQL 脚本、批处理、存储过程和触发器可以使用 UPDATETEXT 语句来仅更新 ntexttextimage 列的一部分。

下面的脚本说明了如何使用 UPDATETEXT 和 PATINDEX 查找和替换 text 值中的特定字符串:

USE Northwind
GO
CREATE TABLE TextParts (ColA INT PRIMARY KEY, ColB TEXT)
GO
INSERT INTO TextParts
   VALUES( 1,
           'Sample string START TAG Text to go END TAG Trailing text.')
GO
DECLARE @PtrVar BINARY(16)
DECLARE @InsertPos INT
DECLARE @DeleteLen INT

SELECT @PtrVar = TEXTPTR(ColB),
       @InsertPos = (PATINDEX('%START TAG%', ColB) + 9),
       @DeleteLen = (
                      PATINDEX('%END TAG%', ColB) -
                      ( PATINDEX('%START TAG%', ColB) + 9
                              + 2 /* allow for blanks */ )
                    )
FROM TextParts
WHERE ColA = 1

UPDATETEXT TextParts.ColB
           @PtrVar
           @InsertPos
           @DeleteLen
           WITH LOG
           'The new text'
GO

SELECT * FROM TextParts
GO

从最终的 SELECT 语句得出的结果集为:

ColA        ColB
----------- ------------------------------------------------------------
1           Sample string START TAG The new text END TAG Trailing text.

请参阅

概念

通过使用 UPDATE 更改数据
通过使用游标更改数据

其他资源

下载 Northwind 和 pubs 示例数据库

帮助和信息

获取 SQL Server 2005 帮助