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

SQL Server 資料清理:批次移除 varchar 欄位前後空白與統一大小寫

     編輯:關於SqlServer

背景動機

使用者輸入資料常含前後空白或大小寫不一,導致比對、分組、報表錯誤。本文提供一個預存程序,掃描所有使用者資料表的 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 條件:僅更新實際包含空白的列,減少寫入量與鎖定爭用。
    WHERE DATALENGTH(LTRIM(RTRIM(col))) < DATALENGTH(col)
  • 大小寫標準化:視業務需求搭配 UPPER() 或 LOWER()。
  • 分批提交:大表建議配合 TOP (N) 分批處理,避免長交易阻塞。
  • 備份先行:執行前務必完整備份或建立快照。

替代方案

  • 計算欄位 / 視圖:於查詢層即時清理,不異動原始資料。
  • CHECK 約束 / 觸發器:攔截髒資料寫入,治本勝治標。
  • ETL/資料整合工具:如 SSIS 於載入階段統一清洗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved