如何在SQL Server中去除表中不可見字符_Mssql數(shù)據(jù)庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解讀在Oracle數(shù)據(jù)庫中高速導(dǎo)出/導(dǎo)入的方法
      迄今為止,導(dǎo)出/導(dǎo)入工具集仍是跨多個(gè)平臺(tái)轉(zhuǎn)移數(shù)據(jù)所需勞動(dòng)強(qiáng)度最小的首選實(shí)用工具,盡管人們常常抱怨它速度太慢。導(dǎo)入只是將每條記錄從導(dǎo)出轉(zhuǎn)儲(chǔ)文件中讀出來,然后使用常見的 INSERT INTO 命令將其插入到目標(biāo)表中,因此導(dǎo)入可能是個(gè)很慢的過程,這一點(diǎn)并不

      以下的實(shí)例為去除指定表中數(shù)據(jù)類型是VARCHAR,CHAR,NVARCHAR的字段值中的不可見字符。 注釋:此處只去掉前后的不可見字符,不包括中間的字符,而且沒有區(qū)分中文。

      在使用前需要指定對(duì)應(yīng)要修改的表名,并且需要在對(duì)應(yīng)數(shù)據(jù)庫下執(zhí)行;

      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'--指定想要修改的表名
      --定義游標(biāo)取出指定表內(nèi)的數(shù)據(jù)類型是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
      --打開游標(biāo)
      OPEN cur_ColName
      FETCH NEXT FROM cur_ColName INTO @ColName
      IF @@FETCH_STATUS<>0
      BEGIN
      PRINT '沒有對(duì)應(yīng)表或字段,
      'PRINT '請(qǐng)確認(rèn)當(dāng)前數(shù)據(jù)庫內(nèi)有' @TblName '表,
      ' PRINT '或該表內(nèi)有VARCHAR、CHAR、NVARCHAR、NCHAR類型的字段!
      ' GOTO LABCLOSE
      END--循環(huán)修改
      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
      --關(guān)閉、釋放游標(biāo)LABCLOSE: CLOSE cur_ColName
      DEALLOCATE cur_ColName

      分享:解讀數(shù)據(jù)庫自動(dòng)化技術(shù)彌補(bǔ)數(shù)據(jù)庫DBA短缺難題
      全球數(shù)據(jù)量的瘋狂增長,使得市場(chǎng)對(duì)資深數(shù)據(jù)庫管理員的需求也節(jié)節(jié)攀升。據(jù)統(tǒng)計(jì),一直到2016美國IT市場(chǎng)對(duì)數(shù)據(jù)庫管理員的需求量增長都將會(huì)超過所有其他職業(yè)。數(shù)據(jù)庫管理員具備一整套專業(yè)性非常強(qiáng)的技術(shù)技能,因此其在數(shù)據(jù)中心里的地位是最難以替代的。 數(shù)據(jù)庫自

      來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫教程/更新時(shí)間:2009-07-06
      相關(guān)Mssql數(shù)據(jù)庫教程