使用者輸入資料常含前後空白或大小寫不一,導致比對、分組、報表錯誤。本文提供一個預存程序,掃描所有使用者資料表的 varchar 欄位,批次執行 LTRIM(RTRIM()) 清理。
CREATE PROCEDURE pro_ClearupData
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tableName sysname, @columnName sysname;
DECLARE cur_find CURSOR LOCAL FAST_FORWARD FOR
SELECT o.name, c.name
FROM syscolumns c
JOIN sysobjects o ON c.id = o.id
JOIN systypes t ON c.xtype = t.xtype
WHERE o.xtype = 'U'
AND o.name <> 'dtproperties'
AND t.name = 'varchar';
OPEN cur_find;
FETCH NEXT FROM cur_find INTO @tableName, @columnName;
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @sql nvarchar(max) = N'UPDATE ' + QUOTENAME(@tableName) +
N' SET ' + QUOTENAME(@columnName) +
N' = LTRIM(RTRIM(' + QUOTENAME(@columnName) + N'))';
EXEC sp_executesql @sql;
FETCH NEXT FROM cur_find INTO @tableName, @columnName;
END
CLOSE cur_find;
DEALLOCATE cur_find;
END;
GO
nvarchar、char、nchar 等字串型別。WHERE DATALENGTH(LTRIM(RTRIM(col))) < DATALENGTH(col)UPPER() 或 LOWER()。TOP (N) 分批處理,避免長交易阻塞。