--不用这么麻烦嘛.在最后多补一个条件1=1就行了.SELECT UserId,UserName,.... FROM Users WHERE UserId IN (SELECT UserId FROM Users WHERE {cond0} AND {cond1}) AND {cond2} AND {cond i}...... 1=1

解决方案 »

  1.   

    Ceate procedure p_GetUserInfo(
       @WhereStr varchar(1000)
    as
    Exec('select UserId,UserName,...From Users '+@WhereStr)
    Go
      

  2.   

    declare @strWhere varchar(1000)
    set @strWhere=''
    set @strwhere=@strwhere + 'and ...'
    exec('select ... where 1=1 ' + @strWhere)
      

  3.   

    各位大哥,我暂时不想考虑这个1=1这种方法,因为我是在做一个接口函数:就是如果有条件不存在的话,就去掉不必要的关键字,然后返回可以使用的SQL
      

  4.   

    declare @strWhere varchar(1000)
    declare @strSQL varchar(2000)set @strSQL='select ...'
    set @strWhere=''
    set @strwhere=@strwhere + 'and ...'if @strWhere<>''
      @strSQL=@strSQL + ' where ' + substirng(@strWhere,5,1000)
    exec(@strSQL)
      

  5.   

    TO: zjcxc(邹建) 
    谢谢您!我在用vb.net写一个类,其中要提供一个函数:
    public function SqlParse(str as string) as string
        
    end function传入的str为一串有可能错误的SQL字符串:
    select * from users where {userid=''} or {name=''}
    因为该句中userid可能为空,那么传入的字串就成了:
    select * from users where or {name=''},显然是多了一个or,所以我在该方法中就得扫描该串,去除 or ,当然实际中可能SQL语句会很复杂,有嵌套,各种类型的连接等。所以我想参考是否有这样的sql server提供的存储过程供我参考?
      

  6.   

    是有点麻烦!为了业务分离啊,
    把SQL语句存入数据库,这样做的话,前台界面只需传入简单的参数即可,而且修改时也不定要修改程序了。
      

  7.   

    你这样:sqlstr="select * from users where 1=1"if ...
     sqlstr=sqlstr+"or (userid='')"if ...
     sqlstr=sqlstr+"or (name='')"
      

  8.   

    大力哥,不行啊我并非是一句语句啊,也不知道它有没有and ,or ,select,having等这些关键字啊,slq语句只不过是一个传入的参数,我只能解析它,去除多余的关键字