更改 ntext、text 或 image 数据

当替换所有值时,可以通过下列方法更新行中的 ntext、text 或 image 的值。

  • 像指定 char、nchar 或 binary 数据那样,在 UPDATE 语句中指定数量相对较少的数据。

  • 使用 WRITETEXT

  • ADO 应用程序可以使用 AppendChunk 方法指定较长的 ntext、text 或 image 数据。

  • OLE DB 应用程序可以使用 ISequentialStream 接口写入新的 ntext、text 或 image 值。有关详细信息,请参阅BLOB 和 OLE 对象

  • ODBC 应用程序可以使用 SQLPutData 执行时的数据格式写入新的 ntext、text 或 image 值。有关详细信息,请参阅管理 Text 和 Image 列

  • DB-Library 应用程序可以使用 dbwritetext 函数。有关详细信息,请参阅文本与图像函数 (Transact-SQL)

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

下面的脚本说明了如何使用 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.