怎样在SQL Server中去除表中不可见字符

作者:489133 来源:赛迪网 时间:2009-02-05 15:23:00 

以下的实例为去除指定表中数据类型是VARCHAR,CHAR,NVARCHAR的字段值中的不可见字符。 注释:此处只去掉前后的不可见字符,不包括中间的字符,而且没有区分中文。

在使用前需要指定对应要修改的表名,并且需要在对应数据库下执行;

SET NOCOUNT ON
DECLARE @TblName  VARCHAR(100)
DECLARE @UpdateString NVARCHAR(1000)
DECLARE @SelectString NVARCHAR(1000)
DECLARE @COlName VARCHAR(100)
DECLARE @COUNT  INT
SET @TblName = 'YOURTABLENAME'--指定想要修改的表名
--定义游标取出指定表内的数据类型是VARCHAR,char,nVARCHAR的字段名称
DECLARE cur_ColName  CURSOR
FOR
SELECT col.name
FROM syscolumns AS col
inner join sysobjects  AS obj  ON col.ID = obj.ID
INNER join systypes  AS typ  ON col.xtype = typ.xtype
WHERE obj.xtype ='U'
AND obj.name = @TblName
AND typ.name IN ('VARCHAR','CHAR','NVARCHAR','NCHAR')
FOR READ ONLY
--打开游标
OPEN cur_ColName
FETCH NEXT FROM cur_ColName INTO @ColName
IF @@FETCH_STATUS<>0
BEGIN
PRINT '没有对应表或字段,
'PRINT '请确认当前数据库内有' + @TblName + '表,
' PRINT '或该表内有VARCHAR、CHAR、NVARCHAR、NCHAR类型的字段!
' GOTO LABCLOSE
END--循环修改
WHILE @@FETCH_STATUS=0
BEGIN
--拼修改字符串
--去掉左边的不可见字符
SET @SelectString = 'SELECT @COU=COUNT(*)    
FROM ' + @TblName +'   
WHERE ASCII(LEFT(' + @ColName +',1))<32
AND '+ @ColName + ' IS NOT NULL'
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',
@COUNT OUTPUT WHILE @COUNT>0
BEGIN 
SET @UpdateString =  
' UPDATE ' + @TblName +  
' SET ' + @ColName + '=RIGHT(' + @ColName + ',LEN(' + @ColName + ')-1)   
WHERE ASCII(LEFT(' + @ColName + ',1))<32   
AND ' + @ColName + ' IS NOT NULL' 
EXEC sp_executesql @UpdateString 
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',@COUNT OUTPUT
END
--去掉右边的不可见字符 SET @SelectString = 'SELECT @COU=COUNT(*)    
FROM ' + @TblName +'   
WHERE ASCII(RIGHT(' + @ColName +',1))<32   
AND '+ @ColName + ' IS NOT NULL'
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',
@COUNT OUTPUT WHILE @COUNT>0
BEGIN 
SET @UpdateString =   ' UPDATE ' + @TblName +   ' SET '
+ @ColName + '=LEFT(' + @ColName + ',LEN(' + @ColName + ')-1)   
WHERE ASCII(RIGHT(' + @ColName + ',1))<32   
AND ' + @ColName + ' IS NOT NULL' 
EXEC SP_EXECUTESQL @UpdateString 
EXEC sp_executesql @SelectString,N'@COU INT OUTPUT',
@COUNT OUTPUT
END
PRINT 'column: ' + @ColName + '---ok'
FETCH NEXT FROM cur_ColName INTO @ColName
END
--关闭、释放游标LABCLOSE: CLOSE cur_ColName 
DEALLOCATE cur_ColName

标签:SQL,Server,去除,字符
0
投稿

猜你喜欢

  • CSS样式表中SPAN和DIV的区别

    2007-10-21 08:47:00
  • 解决oracle用户连接失败的解决方法

    2011-01-04 19:35:00
  • DIV+CSS高度自适应网页代码实例

    2008-09-20 08:00:00
  • CSS如何做细线表格

    2009-01-09 13:12:00
  • 解决Dreamweaver不支持中文文件名方法

    2008-01-09 12:52:00
  • asp #include file 与 #include virtual 的区别小结第1/2页

    2011-04-02 11:17:00
  • 链接与文本标签们

    2008-04-04 18:07:00
  • 巧妙规划使用Oracle数据空间

    2009-03-20 11:51:00
  • JavaScript十二月新标准ECMA262v5快速浏览

    2009-12-27 12:56:00
  • ORACLE 数据库RMAN备份恢复

    2009-04-24 12:23:00
  • MYSQL教程:表达式操作符和数据类型转换

    2009-02-27 15:51:00
  • 2008圣诞节网站特色Logo不完全点评

    2008-12-25 18:35:00
  • phpMyAdmin下载、安装和使用入门

    2007-06-15 11:00:00
  • 如何利用ASP实现邮箱访问

    2007-09-29 12:27:00
  • Msxml2.XMLHTTP Microsoft.XMLHTTP new XMLHttpRequest用法

    2010-03-30 09:43:00
  • 如何让IIS支持wap,让ASP生成wml

    2008-05-18 13:42:00
  • 你的网站使用了微格式了么

    2009-05-21 12:10:00
  • ASP生成XML文件

    2009-06-29 16:28:00
  • 关于分页查询和性能问题

    2008-03-11 12:25:00
  • ProC 连接Oracle代码

    2009-06-10 18:12:00
  • asp之家 网络编程 m.aspxhome.com