大家好:
    我把一条包含特殊字符(比如:[)的自负串插入数据库后,但是我接着查询的时候输入[作为查询条件,怎么就查询不到结果,请问应该怎么来改写?
   我写的SQL语句:SelectCommand="SELECT CODE, DESCRIPTION FROM CATEGORY WHERE (CODE LIKE '%' + @Code + '%' AND DESCRIPTION LIKE '%' + @Desc + '%')">      @Desc 中可能含有特殊字符

解决方案 »

  1.   

    SQL中escape的主要用途
    1.使用   ESCAPE   关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。例如,要搜索在任意位置包含字符串   5%   的字符串,请使用:     
      WHERE   ColumnA   LIKE   '%5/%%'   ESCAPE   '/'   
    2.ESCAPE   'escape_character'     
      允许在字符串中搜索通配符而不是将其作为通配符使用。escape_character   是放在通配符前表示此特殊用途的字符。   
        
      SELECT   *   
      FROM   finances   
      WHERE   description   LIKE   'gs_'   ESCAPE   'S'   
      GO   
        
      意思就是:   
      比如,我们要搜索一个字符串     "g_"     ,如果直接     like     "g_",那么   "_"的作用就是通配符,而不是字符,结果,我们会查到比如     "ga","gb","gc",而不是我们需要的   "g_".   
      用     LIKE   'gs_'   ESCAPE   'S'     's'表示特殊用法标志   
    3.create   table   a   (name   varchar(10))   
      go   
      insert   into   a   select   '11%22'   
      union   all   select   '11%33'   
      union   all   select   '12%33'   
      go   
      select   *   from   a     WHERE   name   LIKE   '%/%33'   ESCAPE   '/'   --指定用'/'符号来说明跟在其后面的通配符字符为普能字符。(第二个%是字符不是通配符来的)   
      go   
      drop   table   a 
    结果为:   
      name                 
      ----------     
      11%33   
      12%33   
      

  2.   


       用escpe 取出特殊的字符.
     如:
      SELECT   content   
      FROM   Content   
      WHERE   content   LIKE   '/%%'   ESCAPE   '%' 
      查询出以'%'打头的文本内容
      

  3.   

    DECLARE @t TABLE(v VARCHAR(100))
    INSERT @t SELECT '%asdfas'
    UNION ALL SELECT 'asdf[asdf'
    UNION ALL SELECT 'asdf[%asdf'
    DECLARE @s VARCHAR(10)
    SET @s='%'
    --意外
    SELECT * FROM @t WHERE v LIKE '%' + @s + '%'
    /*
    %asdfas
    asdf[asdf
    asdf[%asdf
    */
    SET @s='['
    --意外
    SELECT * FROM @t WHERE v LIKE '%' + @s + '%'
    /*
    no records
    */
    SET @s='[%'
    --正确
    SELECT * FROM @t WHERE v LIKE '%' + REPLACE(REPLACE(@s,'[','\['),'%','\%') + '%' ESCAPE('\')
    /*
    asdf[%asdf
    */