把可能的选择都作为参数,默认值为 % (对于字符型),在存储过程中用 like

解决方案 »

  1.   

    用IF條件判斷declare @TSQL as varchar(8000)
    declare @arg1 as varchar(2000)set @TSQL='select * from Table where '
    if 條件1<>''
         @TSQL=@TSQL + 'ID="'參數1'"'
    elseif 條件2<>''
         @TSQL=@TSQL + 'Name='"參數2"''
    .....
      

  2.   

    用IF條件判斷Create Proc dbo.Query
    參數1 as varchar(10)
    參數2 as varchar(20)
    .....
    as declare @TSQL as varchar(8000)set @TSQL='select * from Table where '
    if 條件1<>''
         @TSQL=@TSQL + 'ID="'參數1'"'
    elseif 條件2<>''
         @TSQL=@TSQL + 'and' + 'Name='"參數2"''
    .....
    --Print @TSQL (打印SQL用于檢查語法是否正確)
    exec(@TSQL)
    --應該很詳細了吧
      

  3.   

    楼上的回答一般来说都可以只不过当条件非常多的时候这样判断的确让人感到头痛.并且难免出错 ...
    Create Proc Query
    參數1 as varchar(10)
    參數2 as varchar(20)
    參數3 as varchar(20)
    參數4 as varchar(20)
    .....
    參數n as varchar(20)
    as 
    declare @flg as int
    declare @TSQL as varchar(8000)
    select @flg=0
    set @TSQL='select * from Table '
    if 條件1=''and 條件2 ='' and 條件3='' and 條件4=''and ....條件n=''
         @TSQL=@TSQL 
    else
      begin  
        if 條件1<>''
          @TSQL=@TSQL + 'where ' + 'Name='"參數1"''
          set @flg=1
        if 條件2<>''
          if @flg=0
             @TSQL=@TSQL + 'where ' + 'Name='"參數2"''
             set @flg=1
          else
             @TSQL=@TSQL + 'and' + 'Name='"參數2"''
        if 條件3<>''
          if @flg=0
             @TSQL=@TSQL + 'where ' + 'Name='"參數3"''
             set @flg=1
          else
             @TSQL=@TSQL + 'and' + 'Name='"參數3"''
       
    .....
        if 條件n<>''
          if @flg=0
             @TSQL=@TSQL + 'where ' + 'Name='"參數n"''
             set @flg=1
          else
             @TSQL=@TSQL + 'and' + 'Name='"參數n"''   end 
    --Print @TSQL (打印SQL用于檢查語法是否正確)
    exec(@TSQL)希望对你有帮助.....呵呵
      

  4.   

    Create Proc Query
    參數1 as varchar(10) =nulll,
    參數2 as varchar(20) =null,
    參數3 as varchar(20)=''
    ...通过设定参数的默认值来解决!
      

  5.   

    设默认值听起来好像简单一些似的。但默认值怎么设?我的参数有varchar, integer, bit, datetime 等。好像设null了什么也搜不出来了。varchar 类型的设默认值为%时有抱怨这个值会被忽视的。还是举个例子吧, 我的参数有以下几个;create proc prc_query
    @phrase as varchar(100)=???,
    @item_id as integer=???,
    @open as bit=???,
    @start_date as datetime=???
    as 
    select ........
    and (freetext(a.item, @phrase) or freetext(a.name, @phrase) or freetext(a.answer, @phrase))
    and a.item_id=@item_id
    and a.date>=@start_date
    and open=@opengo或者用IF 判断;create proc prc_query
    @phrase as varchar(100)=???,
    @item_id as integer=???,
    @open as bit=???,
    @start_date as datetime=???
    as 
    declare @TSQL as varchar(1000)
    set @TSQL='select ........'
    if @phrase<>???怎么判断?要不要在上边设成null?
     @TSQL=@TSQL+' and (freetext(a.item, @phrase) or freetext(a.name, @phrase) or freetext(a.answer, @phrase))'
    if @item_id?????
     @TSQL=@TSQL+ ' and a.item_id=@item_id'
    if @start_date?????
     @TSQL=@TSQL+ 'and a.date>=@start_date'
    if @open?????
     @TSQL=@TSQL+ ' and open=@open'EXEC(@TSQL)这第二个procedure到了第一次增加 @TSQL 的时候就说有语法错误了,
    帮我看看怎样才能让它工作呀?
      

  6.   

    @TSQL=@TSQL + 'where ' + 'Name='"參數1"''參數不能按照你下面這樣寫,應該像上面這樣寫,包含在一個字符串中參數算什麼' and a.item_id=@item_id',@item_id就不再是參數了,再好好想一下,並且用print (@TSQL)輸出來看看
    @TSQL=@TSQL+ ' and a.item_id=@item_id'