首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 文字/二進位大型資料操作:WRITETEXT、READTEXT、UPDATETEXT 完整指南

     編輯:關於SqlServer

核心函數對照

功能關鍵函數/陳述式用途
寫入TEXTPTR、WRITETEXT取得指標→寫入資料
讀取TEXTPTR、READTEXT、PATINDEX、DATALENGTH分塊讀取大型文字
更新UPDATETEXT部分更新、插入、刪除

1. WRITETEXT 完整寫入範例

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

2. READTEXT 分塊讀取範例

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

3. UPDATETEXT 部分更新範例

-- 完全取代
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 陳述式,功能更強且語法簡潔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved