text/ntext (已淘汰,建議用 varchar(max)/nvarchar(max)) 不支援直接 REPLACE,需轉換或使用 UPDATETEXT。
DECLARE @pos INT, @len INT, @str NVARCHAR(4000), @des NVARCHAR(4000), @count INT; SET @des = ''; -- 目標字串 SET @len = LEN(@des); SET @str = ' '; -- 替換字串 SET @count = 0; WHILE 1=1 BEGIN -- 尋找目標位置 SELECT @pos = PATINDEX('%' + @des + '%', col) - 1 FROM t WHERE 條件; IF @pos >= 0 BEGIN DECLARE @ptrval BINARY(16); SELECT @ptrval = TEXTPTR(col) FROM t WHERE 條件; UPDATETEXT t.col @ptrval @pos @len @str; SET @count = @count + 1; END ELSE BREAK; END SELECT @count; -- 替換次數統計
| 函數 | 用途 |
|---|---|
TEXTPTR(col) | 取得 text/ntext 欄位的 16 位元組指標 |
PATINDEX(pattern, col) | 搜尋模式首次出現位置 (1-based) |
UPDATETEXT table.col @ptr @pos @delete_len @insert_str | 在指標位置替換指定長度字串 |
ALTER COLUMN不支援修改text/image/ntext/timestamp欄位。
-- 單一視圖
EXEC sp_refreshview 'view_name';
-- 批次重新整理所有視圖
DECLARE @vName SYSNAME;
DECLARE cur CURSOR FOR SELECT name FROM sysobjects WHERE xtype='V' ORDER BY crdate;
OPEN cur; FETCH NEXT FROM cur INTO @vName;
WHILE @@FETCH_STATUS <> -1 BEGIN
EXEC sp_refreshview @vName;
PRINT 'View ' + @vName + ' refreshed';
FETCH NEXT FROM cur INTO @vName;
END
CLOSE cur; DEALLOCATE cur;