很常见的问题,现在由一张表里面由很多字段,用户在查询时有可能只有一个条件也可能有很多条件,怎么用一条sql语句查出来啊

解决方案 »

  1.   

    where 1=1 {0}后面的一个一个拼上去如果要再加条件,将{0}转化成条件,例如 :将{0}转化成 And 字段=‘ds’ 
      

  2.   

    楼主可以参考一下我回复过的这个贴
    http://topic.csdn.net/u/20080211/15/fa61ce0c-c704-425c-bbac-3b90dcb99ceb.html
    alter proc [dbo].[usp_SearchTMSelect]
        (
        @TargetID  char(10),
        @BeginData varchar(50),
        @EndData varchar(50),
        @WordID varchar(50),
        @NameMM  varchar(50),
        @ProjectID  varchar(50),
        @TrainNumber varchar(50),
        @CompleteSituation varchar(50)    
        ) 
    asdeclare @w varchar(8000),@sql varchar(8000)
    select @w='',@sql=''if @ProjectID is not null
    set @w=@w+'and ProjectID like ''%'+@ProjectID+'%'''if @TrainNumber is not null
    set @w=@w+'and TrainNumber like ''%'+@TrainNumber+'%'''if @CompleteSituation is not null
    set @w=@w+'and CompleteSituation like ''%'+@CompleteSituation+'%'''if @NameMM is not null
    set @w=@w+'and NameMM like ''%'+@NameMM+'%'''if @TargetID is not null
    set @w=@w+'and TargetID like ''%'+@TargetID+'%'''if @WordID is not null
    set @w=@w+'and WordID like ''%'+@WordID+'%'''if @BeginData is not null and @EndData is not null
    set @w=@w+'and Data between '''+@BeginData+''' and '''+@EndData+''''if @w<>'' or @w is not null
    set @w=' where '+stuff(@w,1,3,'')
    set @sql='select * from SearchTM'+@wprint @sql   
    --exec (@sql)
    exec usp_SearchTMSelect
            @TargetID = NULL,
            @BeginData = NULL,
            @EndData = NULL,
            @WordID = NULL,
            @NameMM = N'张嘉',
            @ProjectID = N'1335870580',
            @TrainNumber = NULL,
            @CompleteSituation = N'已完成'/*
    测试结果:select * from SearchTM where  ProjectID like '%1335870580%'and CompleteSituation like '%已完成%'and NameMM like '%张嘉%'*/
      

  3.   

    很简单写存储过程例子 
    create proc a@a int='',
    @b varchar(10)='',
    ..as
    select * from 你要查的表 where  (字段1=@a or @a='') and .......你可以设定查旬的条件
    如果没输入的话 就直接传入 空值
      

  4.   

    不要用动态SQL  那个看起来狗屎连稻草  我那个很好用很简单
      

  5.   

    我觉得直接在程序里面写,用where 1=1 构造sql语句,省事
      

  6.   

    晕你还不明白我的意思!郁闷 (字段1=@a or @a='')这个你看不明白吗?
     当你不选的时候默认这个@a=''  说明此条件作废不用考虑! 如果选择的话 就执行这个条件  字段1=@a  你可以给分数了! 
    你不给就是我太傻太天真了