| 功能 | 關鍵函數/陳述式 | 用途 |
|---|---|---|
| 寫入 | TEXTPTR、WRITETEXT | 取得指標→寫入資料 |
| 讀取 | TEXTPTR、READTEXT、PATINDEX、DATALENGTH | 分塊讀取大型文字 |
| 更新 | UPDATETEXT | 部分更新、插入、刪除 |
BEGIN TRAN
DECLARE @ptr VARBINARY(16)
SELECT @ptr = TEXTPTR(pr_info) FROM pub_info (UPDLOCK) WHERE pub_id = '9999'
IF @ptr IS NOT NULL
WRITETEXT pub_info.pr_info @ptr WITH LOG 'new data'
COMMIT TRAN
BEGIN TRAN
DECLARE @ptr VARBINARY(16), @total INT, @read INT, @done INT
SET TEXTSIZE 100
SELECT @ptr = TEXTPTR(pr_info), @total = DATALENGTH(pr_info),
@done = 0,
@read = CASE WHEN 100 < DATALENGTH(pr_info) THEN 100 ELSE DATALENGTH(pr_info) END
FROM pub_info WHERE pub_id = '1622'
IF @ptr IS NOT NULL AND @read > 0
BEGIN
WHILE @done < @total
BEGIN
READTEXT pub_info.pr_info @ptr @done @read HOLDLOCK
IF @@ERROR <> 0 BREAK
SET @done = @done + @read
IF @done + @read > @total SET @read = @total - @done
END
END
COMMIT TRAN
-- 完全取代
DECLARE @ptr VARBINARY(16)
BEGIN TRAN
SELECT @ptr = TEXTPTR(pr_info) FROM pub_info (UPDLOCK) WHERE pub_id = '9999'
IF @ptr IS NOT NULL
UPDATETEXT pub_info.pr_info @ptr 0 NULL WITH LOG 'replaced entirely'
COMMIT
-- 部分插入(於 'D.C.' 後插入)
DECLARE @ptr VARBINARY(16), @off INT
BEGIN TRAN
SELECT @ptr = TEXTPTR(pr_info), @off = PATINDEX('%D.C.%', pr_info) - 1 + 4
FROM pub_info (UPDLOCK) WHERE pub_id = '0877'
IF @ptr IS NOT NULL AND @off >= 0
UPDATETEXT pub_info.pr_info @ptr @off 0 WITH LOG ' inserted text'
COMMIT
Offset:0=開頭,NULL=附加Delete_Length:0=不刪除,NULL=刪除所有剩餘WITH LOG:記錄至交易記錄檔(可復原)SQL Server 2005+ 建議改用 varchar(max)、varbinary(max) 搭配標準 UPDATE 陳述式,功能更強且語法簡潔。