需要提供对象:

一张需要被替换字符的表。

通过游标结合动态SQL对某一张特定表的所有列进行更新,主要是对其列值的异常字符处理。

dbo.Characters_need_to_be_replaced

记录平时code点滴,这次是通过一张充满异样字符的表,对数据表中的每一列进行清理,比double quotation的issue难多了!-LMLPHP

create proc usp_Clean_Table

@table_name sysname
as
begin

set nocount on

declare @col_name varchar(max)='',
@SQLCMD varchar(max)=''
declare replace_cur cursor local static forward_only for 
select name from sys.all_columns where is_identity=0 and object_id=object_id(@table_name)
open replace_cur
while(1=1)
begin 
fetch next from replace_cur into @col_name

if @@fetch_status!=0 break

--if 1=0 continue
        declare @col varchar(30)=''
        set @col=@col_name--为了不被覆盖只好定义个变量临时存储每次的列名。
        select @col_name='replace('+@col_name+',char('+cast(ASCII(chr) as varchar)+'),'''')' from dbo.Characters_need_to_be_replaced --这个类似于递归调用
        print @col_name
        set @SQLCMD='update '+@table_name+' set '+@col+'='+@col_name
        print @SQLCMD
        --exec master..sp_executesql N@SQLCMD

end

close replace_cur

deallocate replace_cur

end

虽然显得有些粗糙,但是确实是个强大的功能,可以改写好多了。感悟就是要有迭代跟递归的思想。

04-28 05:01