@selectIndex 是传入的参数 如果是0 就模糊查 LoginName 对应的值 @searchfilterand LoginName like case @selectIndex when 0 then '%'+@searchfilter+'%' else LoginName endand f.Agentid like case @selectIndex when 1 then '%'+@searchfilter+'%' else f.Agentid endand u.Tel like case @selectIndex when 2 then '%'+@searchfilter+'%' else u.Tel endand b.CName  like case @selectIndex when 3 then '%'+@searchfilter+'%' else b.CName endand u.Mobile  like case @selectIndex when 4 then '%'+@searchfilter+'%' else u.Mobile endand u.UserName  like case @selectIndex when 5 then '%'+@searchfilter+'%' else u.UserName endand b.[Address] like case @selectIndex when 6 then '%'+@searchfilter+'%' else b.[Address] end这样似乎很慢如何优化

解决方案 »

  1.   

    你想查询什么?这些字段包含@searchfilter的吗?
      

  2.   


    我这里只是查询的一部分 通过@selectIndex 来看 要查哪个字段的值
      

  3.   

    declare @sortField varchar(20)
    if (@selectIndex = 0)
    {
      @sortField ='sadfsdafasdf';
    }
      

  4.   


    ...................................
    if 还没有case when then 效率高哦.........
      

  5.   

    我晕 每个case when都要让走?
      

  6.   

    我以为是根据不同index 查询不同的字段呢
    这样的话用if 可以少走几行代码
      

  7.   

    case @selectIndex 
    when 0 then LoginName like '%'+@searchfilter+'%'
    when 1 then f.Agentid like '%'+@searchfilter+'%'
    when 2 then u.Tel like '%'+@searchfilter+'%'
    when 3 then b.CName like '%'+@searchfilter+'%'
    when 4 then u.Mobile like '%'+@searchfilter+'%'
    when 5 then u.UserName like '%'+@searchfilter+'%'
    when 6 then  b.[Address] like '%'+@searchfilter+'%'
    end 
      

  8.   

    问问哦 这个在一个完整的sql 里面如何写 ??select * from table where id=@id and case @selectIndex 
        when 0 then LoginName like '%'+@searchfilter+'%'
        when 1 then f.Agentid like '%'+@searchfilter+'%'
        when 2 then u.Tel like '%'+@searchfilter+'%'
        when 3 then b.CName like '%'+@searchfilter+'%'
        when 4 then u.Mobile like '%'+@searchfilter+'%'
        when 5 then u.UserName like '%'+@searchfilter+'%'
        when 6 then  b.[Address] like '%'+@searchfilter+'%'
    end 这样写有错误吧??? 
      

  9.   

    ((LoginName like '%'+@searchfilter+'%' AND @selectIndex=0) OR 
    (cast(f.Agentid  as varchar) like '%'+cast(@searchfilter as varchar)+'%' AND @selectIndex=1) OR
    (u.Tel like '%'+@searchfilter+'%' AND @selectIndex=2) OR
    (u.Mobile like '%'+@searchfilter+'%' AND @selectIndex=3) OR 
    (b.CName like '%'+@searchfilter+'%' AND @selectIndex=4) OR
    (u.UserName like '%'+@searchfilter+'%' AND @selectIndex=5) OR
    (b.[Address] like '%'+@searchfilter+'%' AND @selectIndex=6))虽然11楼的可以 但是那个写在我的查询里面的时候报like 附近错误所以请教了别人的查询 这个也不错 这个不错哦