Sql Server去除表中的不可見字元

iSQlServer發表於2009-07-14

SET NOCOUNT ON
DECLARE @TblName  VARCHAR(100)
DECLARE @UpdateString NVARCHAR(1000)
DECLARE @SelectString NVARCHAR(1000)
DECLARE @COlName VARCHAR(100)
DECLARE @COUNT  INT
SET @TblName = '表名稱'--指定想要修改的表名
--
定義遊標取出指定表內的資料型別是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
GO

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-609100/,如需轉載,請註明出處,否則將追究法律責任。

相關文章