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

SQL Server 資料內容替換完全指南:REPLACE 函數、NTEXT 處理與預存程序方案

     編輯:關於SqlServer

資料庫維護中常需批次替換欄位內容(如路徑變更、關鍵字修正)。本文詳解三種層級的替換方案。

前置知識:字串資料型別

  • VARCHAR / NVARCHAR / CHAR / NCHAR:一般字串型別
  • NTEXT:大型 Unicode 文字(已棄用,建議改用 NVARCHAR(MAX))

除 NTEXT 外,皆可直接用 REPLACE。

方案一:標準 REPLACE(適用 VARCHAR/NVARCHAR 等)

UPDATE [資料表] SET [欄位] = REPLACE([欄位], '舊字串', '新字串');

範例:替換文章標題

UPDATE [iwms_news] SET [title] = REPLACE([title], '舊字串', '新字串');

方案二:型別轉換法(適用 NTEXT、長度 < 4000)

UPDATE [資料表] SET [欄位] = REPLACE(CONVERT(VARCHAR(4000), [欄位]), '舊字串', '新字串');

範例:替換文章內容

UPDATE iwms_news SET [content] = REPLACE(CONVERT(VARCHAR(4000), [content]), '舊字串', '新字串');

限制:VARCHAR(4000) 截斷超長內容,僅適合單頁 < 4000 字元。

方案三:預存程序游標法(適用任意長度 NTEXT)

DECLARE @ptr VARBINARY(16), @artId INT, @Position INT, @len INT;
SET @len = DATALENGTH('舊字串');

DECLARE wux_Cursor SCROLL CURSOR FOR
SELECT TEXTPTR([欄位]), [主鍵欄位] FROM [資料表] FOR READ ONLY;

OPEN wux_Cursor;
FETCH NEXT FROM wux_Cursor INTO @ptr, @artId;

WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT @Position = PATINDEX('%舊字串%', [欄位]) FROM [資料表] WHERE [主鍵欄位] = @artId;
    WHILE @Position > 0
    BEGIN
        SET @Position = @Position - 1;
        UPDATETEXT [資料表].[欄位] @ptr @Position @len '新字串';
        SELECT @Position = PATINDEX('%舊字串%', [欄位]) FROM [資料表] WHERE [主鍵欄位] = @artId;
    END
    FETCH NEXT FROM wux_Cursor INTO @ptr, @artId;
END
CLOSE wux_Cursor;
DEALLOCATE wux_Cursor;
GO

注意:須在「查詢分析器」執行;分頁內容需同時處理主表與分頁表(如 iwms_news + iwms_pages)。

操作建議

  1. 執行前備份資料庫。
  2. 先用 SELECT 驗證影響範圍。
  3. 大量資料建議分批次、離峰時段執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved