declare @sqlwhere1 varchar(200)
set @sqlwhere1=''
if @feitem<>''  
   set @sqlwhere1=' and a.cfeItem='+@feitem
declare @sql varchar(8000)
set @sql='select ...from tablename where ddate>'''+CONVERT(varchar(10),@ddate,120)+''''+@sqlwhere1

解决方案 »

  1.   

    declare @sqlwhere1 varchar(200)
    set @sqlwhere1=''
    if @feitem<>''  
       set @sqlwhere1=' and a.cfeItem='+@feitem
    declare @sql varchar(8000)
    set @sql='select ...from tablename where ddate>'''+CONVERT(varchar(10),@ddate,120)+''''+@sqlwhere1exec(@sql)
      

  2.   

    declare @sqlwhere1 varchar(200),@s varchar(8000)
    set @sqlwhere1=''
    if @feitem<>''  
       set @sqlwhere1=' and a.cfeItem='+@feitem
    set @s='select ...from tablename where ddate>'''+convert(varchar(10),@ddate,120)+'''' + @sqlwhere1
    exec(@s)
      

  3.   

    必须用动态SQL语句。Exec('select ...from tablename where ddate>'''+convert(varchar(8),@ddate,112)+'''' + @sqlwhere1)
      

  4.   

    如果是动态写法的话,sql语句较复杂时,光引号就够捣鼓的了,不方便,能不能有简洁的写法?
      

  5.   

    如果没有top就话,就可以.有就不可以了.因为有这样的规则:变量不能直接用于top ,from 中的表名,字段名出现这些情况就得用exec的方法.
      

  6.   

    我觉得这种情况在查询重比较普遍,就是用户可以选择一个查询条件,也可以不选择,不选择按默认所有考虑,在存储过程里写有些困难,但在开发语言里些,就方便了,类似于exec方法。
      

  7.   

    最后这样处理,一句话,不知道效率怎么样
    select ...from tablename where ddate>@ddate  and cfeItem like '%'+@feItem +'%'