竞争无处不在,青春永不言败!专业撸代码,副业修bug

Talk is cheap , show me the code!



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

需要提供对象:

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

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

dbo.Characters_need_to_be_replaced 


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 


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

 

posted @ 2015-01-14 06:56  云雾散人  阅读(132)  评论(0编辑  收藏  举报

Your attitude not your aptitude will determine your altitude!

如果有来生,一个人去远行,看不同的风景,感受生命的活力!