變更 ntext、text 或 image 資料
當您要取代整個值時,可以下列方式更新資料列中的 ntext、text 或 image 值。
- 在 UPDATE 陳述式中指定較短的資料量,就像指定 char、nchar 或 binary 資料一樣。
- 使用 WRITETEXT。
- ADO 應用程式可使用 AppendChunk 方法來指定 ntext、text 或 image 的長資料。
- OLE DB 應用程式可使用 ISequentialStream 介面,來寫入新的 ntext、text 或 image 值。如需詳細資訊,請參閱<BLOBs and OLE Objects>。
- ODBC 應用程式可使用 SQLPutData 資料執行中的格式,來寫入新的 ntext、text 或 image 值。如需詳細資訊,請參閱<Managing Text and Image Columns>。
- DB-Library 應用程式可使用 dbwritetext 函數。如需詳細資訊,請參閱<Text 和 Image 函數 (Transact-SQL)>。
SQL Server 2005 也支援僅更新 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.