首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 批量替換字串 (REPLACE) 完整指南:VARCHAR/NVARCHAR/TEXT/NTEXT

     編輯:MySQL 資料庫相關知識

REPLACE 僅支援 VARCHAR/NVARCHAR,TEXT/NTEXT/IMAGE (已棄用) 需轉換後才能替換。本文提供各資料類型的替換語法、長度限制繞過方案與大物件 (LOB) 最佳實踐。

1. VARCHAR / NVARCHAR (直接支援)

UPDATE tbl SET col = REPLACE(col, 'old_str', 'new_str');

2. TEXT (≤ 8000 字元) → 轉 VARCHAR(8000)

UPDATE tbl SET txt_col = REPLACE(CAST(txt_col AS VARCHAR(8000)), 'old', 'new');

3. NTEXT (≤ 4000 字元) → 轉 NVARCHAR(4000)

UPDATE tbl SET ntxt_col = REPLACE(CAST(ntxt_col AS NVARCHAR(4000)), N'舊', N'新');

4. 超過長度限制的 TEXT/NTEXT 替換方案

方案適用場景優點缺點
應用層分批讀取-替換-寫回超長 LOB、需事務一致性無長度限制、可控交易需撰寫程式碼、網路往返
CLR 存儲過程 (C#)頻繁大物件操作效能佳、功能豐富需啟用 CLR、部署組件
遷移至 VARCHAR(MAX)/NVARCHAR(MAX)SQL Server 2005+ 新專案原生支援 REPLACE、無 8000 限制需變更結構、重建索引

5. 實用腳本:全表指定欄位批量替換

DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'UPDATE ' + QUOTENAME(TABLE_SCHEMA) + N'.' + QUOTENAME(TABLE_NAME) +
       N' SET ' + QUOTENAME(COLUMN_NAME) + N' = REPLACE(' + QUOTENAME(COLUMN_NAME) + N', ''https://old.com'', ''https://new.com'');'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE IN ('varchar','nvarchar','text','ntext')
  AND CHARACTER_MAXIMUM_LENGTH IN (8000, 4000, -1)  -- -1 = MAX
  AND TABLE_NAME LIKE 'tbl_%';

EXEC sp_executesql @sql;

6. 注意事項

  • REPLACE 區分大小寫 (依照定序),不區分需 REPLACE(UPPER(col), UPPER('old'), 'new') 或定序 _CI_AS。
  • 大量更新會產生大量交易日誌,建議分批 (每批 5000-10000 行) 配合 CHECKPOINT / 簡單復原模式。
  • SQL Server 2016+ 可用 STRING_AGG、TRANSLATE 等新函數簡化複雜替換。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved