对 title 列建全文索引WHERE title contains(……)

解决方案 »

  1.   

    key1,key2,key13,...是什么?变量?
      

  2.   


    select title from tabl1 where title like '%key%'
    --key 为key1,key2,key13,...的共性 
     
      

  3.   

    key1,key2,key3为用户提交的需要查询的
      

  4.   

    是什么样的哦 ,只是个字符串吗?如 key1="a"   key2="b"吗?如果是,在前台用for循环等连起来,连成 "'a','b','c'"
    执行
    exec('select title from tabl1 where title in('+sqlwhere+')')
      

  5.   


    --IN的用法--1. 构造使用IN子句的动态Transact-SQL方法进行编号查询--a. 要查询的字段类型是数字型--查询的值列表
    DECLARE @idlist varchar(100)
    SET @idlist='1,2,3'--拼接并执行动态Transact-SQL语句
    EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
    GO--b. 要查询的字段类型是字符型
    --查询的值列表已经加上了字符串边界符
    DECLARE @idlist varchar(100)
    SET @idlist='''a'',''b''''a'',''c'''--拼接并执行动态Transact-SQL语句
    EXEC('SELECT * FROM tbname WHERE fdname IN('+@idlist+')')
    GO--查询的值列表没有字符串边界符
    DECLARE @idlist varchar(100)
    SET @idlist='a,b''a,c'--由于是字段类型是,所以在拼接时,必须为其加上字符串边界符(')
    DECLARE @s varchar(1000)
    SET @s=''''
        +REPLACE(REPLACE(@idlist,'''',''''''),',',''',''')
        +''''--拼接并执行动态Transact-SQL语句
    EXEC('SELECT * FROM tbname WHERE fdname IN('+@s+')')
    GO/*=====================================================*/
    --2. 使用LIKE或者PATINDEX进行编号查询
    --查询的值列表
    DECLARE @idlist varchar(100)
    SET @idlist='1,2,3'--查询
    SELECT * FROM tbname WHERE CHARINDEX(','+RTRIM(fdname)+',',','+@idlist+',')>0
    SELECT * FROM tbname WHERE PATINDEX('%,'+RTRIM(fdname)+',%',','+@idlist+',')>0
    SELECT * FROM tbname WHERE ','+@idlist+',' LIKE '%,'+RTRIM(fdname)+',%'
    GO/*=====================================================*/
    --3. 编号查询中常见的错误
    --a. 最容易犯的错误:表达式充当表达式列表。
    DECLARE @s varchar(100)
    SET @s='1'
    SELECT id,name FROM sysobjects WHERE id IN(@s)
    /*--结果
    id          name 
    ---------------- ------------
    1           sysobjects
    --*/SET @s='1,2,3'
    SELECT id,name FROM sysobjects WHERE id IN(@s)
    /*--结果
    服务器: 消息 245,级别 16,状态 1,行 3
    将 varchar 值 '1,2,3' 转换为数据类型为 int 的列时发生语法错误。
    --*/
    GO--b. 生成动态Transact-SQL语句时忽略了数据类型。
    DECLARE @s varchar(100)
    SET @s='U,S'
    EXEC('SELECT id,name FROM sysobjects WHERE id IN('+@s+')')
    /*--结果:
    服务器: 消息 207,级别 16,状态 3,行 1
    列名 'S' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'U' 无效。
    --*/
    GO--c. 忽略了比较的精确性问题。
    --要查询的数据
    DECLARE @t TABLE(col varchar(10))
    INSERT @t SELECT '1'
    UNION ALL SELECT '11'
    UNION ALL SELECT '111'
    UNION ALL SELECT '22'--查询
    DECLARE @s varchar(100)
    SET @s='111,22'
    SELECT * FROM @t WHERE CHARINDEX(col,@s)>0
    /*--结果
    col        
    ---------- 
    1
    11
    111
    22
    -*/
    GO
      

  6.   

    模糊 就是like 意思了
    他是不要这种:title like '%a%' or title like '%b%' or ...这种写法,说是太长了
      

  7.   

    貌似除了长,
    就是无解.....
    不能in,只能like,
    要like,就只能分开了.....
      

  8.   

    title 列建全文索引
    select title from tabl1 where contains (title,'key1,key2,key3....') 
      

  9.   

    建立全文索引后用 
    select title from tabl1 contains(title,'key1 and key2 and key13') 
    select title from tabl1 contains(title,'key1 or key2 or key13') 
      

  10.   

    那这样说
    同一字段的多关键字模糊查询
    除了LIKE一长串还能怎么写。
    ‘完美行动’的写法是不是哪里有点问题程序没通过。
      

  11.   


    建了全文索引,才能使用contains 
      

  12.   

    楼上的解法都不错。但是我估计楼主想要的不是这个效果。
    我猜想,他只想要in查询后面的动态内容该如何实现。
    解法(当作C#了啊):string keyContent="";
    //把用户需要查询的信息依次获得。
    keyContent += "key1";
    keyContent += ",key2";
    keyContent += ",key3";
    //........
    //如果在前台写sql
    string sql="";
    sql="select title from tabl1 where title in("+keyContent+")";
    //然后调用database类或其他的方法执行sql字符串。
    //如果在后台把keyContent 付给参数即可。---------------不知道是不是楼主想要的。
      

  13.   

    可惜我用的ACCESS数据库
    看来要LIKE下去了
      

  14.   

    laowan688 :
    用户不知道title里的标准内容
    输入key1,2,3...来模糊匹配title,
    如何内容和title相同或者被包含的记录将被取出。
      

  15.   


    ——这就是 SQL 全文搜索服务替你做的.要不然怎么叫全文搜索呢?放心大胆地在 title 上建全文索引吧,
      

  16.   

    select title from tabl1 where title in(key1,key2,key13,...)AND title LIKE '通配符+条件+通配符' 
      

  17.   

    是否这样:select title from tabl1 where 
    (title Like @key1+'%' Or @key1 Is Null) And
    (title Like @key2+'%' Or @key2 Is Null) And
    (title Like @key3+'%' Or @key3 Is Null) And
    (title Like @key4+'%' Or @key4 Is Null) And
    ...
    (title Like @key5+'%' Or @key5 Is Null)