CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

再加100分求教 SQL Server中非法字符的处理?

楼主adevil23(adevil)2004-09-04 17:27:18 在 MS-SQL Server / 应用实例 提问

请问SQL   Server中如何将非法字符检测出来处理掉,或者如何在ADO   Dataset的SaveToFile生成的xml中自动除去这些无效字符?比如包含ASCII码值为0x1C、0x0C……等的数据,例如'4'4后面就有一个0x1C,不是空格!  
   
  相关贴http://community.csdn.net/Expert/topic/3337/3337248.xml?temp=.2155878  
  问题点数:100、回复次数:23Top

1 楼pbsql(风云)回复于 2004-09-04 17:30:25 得分 50

你所说的非法字符是怎么定义的?Top

2 楼adevil23(adevil)回复于 2004-09-04 17:31:40 得分 0

'4'Top

3 楼zjcxc(邹建)回复于 2004-09-04 17:35:24 得分 50

replace(字段,N'4','')Top

4 楼pbsql(风云)回复于 2004-09-04 17:36:29 得分 0

你是不是要将键盘无法输入的字符去掉?Top

5 楼zjcxc(邹建)回复于 2004-09-04 17:36:47 得分 0

关键是非法字符的判断规则,如果你无法确定这个规则,则无法做处理.Top

6 楼adevil23(adevil)回复于 2004-09-04 17:41:18 得分 0

包含ASCII码值为0x1C、0x0C……等的数据,主要是一些制表符等等  
   
  可以把这个本网页的xml文件存下来,用UltraEdit打开,就会发现这个ASCII码值了Top

7 楼adevil23(adevil)回复于 2004-09-04 17:44:44 得分 0

To:pbsql(风云)  
      可以按去掉键盘无法输入的字符来处理  
   
  To:zjcxc(邹建)    
      这些数据为什么能存进SQL   Server,能否在源头做控制,即不让这些字符进库  
  Top

8 楼zjcxc(邹建)回复于 2004-09-04 17:48:28 得分 0

源头控制当然可以啦,这个应该是你程序没有写好而已.  
   
  不知道你用什么程序来处理的.Top

9 楼zjcxc(邹建)回复于 2004-09-04 17:49:14 得分 0

另外,我曾经见过PB处理的,会把编码为0的也存进数据库,所以你应该仔细检查一下你的处理程序.Top

10 楼adevil23(adevil)回复于 2004-09-04 17:52:22 得分 0

前台用的delphi  
   
  这些数据不是输入进去的,是用DTS导入的  
   
  现在要去掉键盘无法输入的字符怎么处理?Top

11 楼pbsql(风云)回复于 2004-09-04 17:55:27 得分 0

可以按去掉键盘无法输入的字符来处理  
   
  那就是去掉asc码值小于32的字符就行了Top

12 楼pbsql(风云)回复于 2004-09-04 17:57:06 得分 0

写个函数把asc码值小于32的字符过滤掉即可Top

13 楼adevil23(adevil)回复于 2004-09-04 18:00:30 得分 0

To   pbsql(风云)  
      1、怎么去?  
      2、小于32包括回车、换行等,这些数据可不能去啊  
  To   zjcxc(邹建)    
      你说的前台控制怎么控制?是DataSet   Post时控制?Top

14 楼pbsql(风云)回复于 2004-09-04 18:04:26 得分 0

那就保留#10、#13  
   
  你最好看一下你的程序,防止这样的事情发生Top

15 楼zjcxc(邹建)回复于 2004-09-04 18:09:13 得分 0

--处理的示例函数  
   
  create   function   f_replace(  
  @str   varchar(8000)  
  )returns   varchar(8000)  
  as  
  begin  
  select   @str=replace(@str,a,'')  
  from(select   a=N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N' '  
  union   all   select   N'  
  '  
  union   all   select   N' '  
  union   all   select   N' '  
  union   all   select   N'  
  '  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  union   all   select   N''  
  )a   where   charindex(a,@str)>0  
  return(@str)  
  end  
  go  
   
  --调用函数进行替换处理的示例  
  declare   @s   varchar(10)  
  set   @s='a   '+'b'+char(11)+'c'  
   
  select   dbo.f_replace(@s)  
  go  
   
  drop   function   f_replace  
  Top

16 楼adevil23(adevil)回复于 2004-09-04 18:10:06 得分 0

那对于库里已经存在的数据,去掉这些字符的函数如何写?Top

17 楼zjcxc(邹建)回复于 2004-09-04 18:10:47 得分 0

--自定义函数中用到的字符列表的生成方法:  
   
  declare   @t   table(id   int   identity,a   int)  
  set   rowcount   31  
  insert   @t   select   1   from   syscolumns  
   
  select   'union   all   select   N'''+char(id)+''''  
  from   @tTop

18 楼zjcxc(邹建)回复于 2004-09-04 18:11:57 得分 0

对于不需要去掉的字符,比回车13,换行10,跳格键9,你只需要删除函数中对应的行就行了.Top

19 楼zjcxc(邹建)回复于 2004-09-04 18:12:27 得分 0

--更新表中的数据,当然就是:  
   
  update   表   set   字段=dbo.f_replace(字段)Top

20 楼zjcxc(邹建)回复于 2004-09-04 18:14:02 得分 0

至于我说的前台的问题.  
   
  是指你的处理程序,你首先应该分析产生此问题的根源  
   
  用DTS导入,如果你的导入源文件中没有非法字符,应该是不会产生这种问题的.Top

21 楼adevil23(adevil)回复于 2004-09-04 18:33:08 得分 0

有没有可能是SubString的问题?Top

22 楼zjcxc(邹建)回复于 2004-09-04 20:23:29 得分 0

substring应该不会,除非是对   text、image、binary   或   varbinary   这些类型的字段用substring,这样可能会取半个汉字,形成乱码.Top

23 楼zjcxc(邹建)回复于 2004-09-05 13:55:18 得分 0

--整理一下  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_replace]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))  
  drop   function   [dbo].[f_replace]  
  GO  
   
  /*--非法字符替换函数  
   
  去掉字符串中,小于32的字符  
  保留   TAB     char(9)  
                    换行   char(10)  
                    回车   char(13)  
   
  --邹建   2004.09(引用请保留此信息)--*/  
   
  /*--调用示例  
   
  --调用函数进行替换处理的示例  
  declare   @s   varchar(10)  
  set   @s='a   '+'b'+char(11)+'c'  
   
  select   dbo.f_replace(@s)  
  --*/  
  create   function   f_replace(  
  @str   varchar(8000)  
  )returns   varchar(8000)  
  as  
  begin  
  select   @str=replace(@str,a,'')  
  from(select   a=N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''    
  -- union   all   select   N' ' --TAB     char(9)  
  -- union   all   select   N'  
  -- ' --换行   char(10)  
  union   all   select   N' ' union   all   select   N' '  
  -- union   all   select   N'  
  -- ' --回车   char(13)  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  union   all   select   N''   union   all   select   N''  
  )a   where   charindex(a,@str)>0  
  return(@str)  
  end  
  go  
  Top

相关问题

  • 如何解决SQL语句里的非法字符“的问题
  • SQL Server里字符串里含字符串时如何写?
  • sql_server乱码(修改字符集)
  • 关于SQL Server连接字符串
  • 如何更改SQL Server的字符集
  • sql server截取字符串的函数。
  • 一个sql server字符串问题
  • sql server 中字符串的问题
  • sql server如何判断字符长短
  • php判断sql server 空字符串

关键词

  • 字符
  • 函数
  • 字段
  • 数据
  • ascii码
  • 键盘
  • 控制
  • sql
  • 处理
  • union allselect n

得分解答快速导航

  • 帖主:adevil23
  • pbsql
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo