--不用这么麻烦嘛.在最后多补一个条件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
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)
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提供的存储过程供我参考?
@WhereStr varchar(1000)
as
Exec('select UserId,UserName,...From Users '+@WhereStr)
Go
set @strWhere=''
set @strwhere=@strwhere + 'and ...'
exec('select ... where 1=1 ' + @strWhere)
declare @strSQL varchar(2000)set @strSQL='select ...'
set @strWhere=''
set @strwhere=@strwhere + 'and ...'if @strWhere<>''
@strSQL=@strSQL + ' where ' + substirng(@strWhere,5,1000)
exec(@strSQL)
谢谢您!我在用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提供的存储过程供我参考?
把SQL语句存入数据库,这样做的话,前台界面只需传入简单的参数即可,而且修改时也不定要修改程序了。
sqlstr=sqlstr+"or (userid='')"if ...
sqlstr=sqlstr+"or (name='')"