不知道我们是否可以在条件中添加if或case。
我正在尝试将动态查询转换为简单查询
Declare @sQuery varchar(20000)
set @sQuery=''
set @sQuery ='select * from #tb_user ud'
if(@Number<>'')
set @sQuery = @sQuery + 'and upper(ud.ID) like ''' + upper(@Number) + '%'''
if(@Name<>'')
set @sQuery = @sQuery + 'and upper(ud.FName) like ''' + upper(@Name) + '%'''
Exec(@sQuery )
注意:
下面给出的查询只是我推迟的一个例子,我没有得到如何在简单查询中处理if条件。(实际查询有很多东西)
提前感谢您提供任何帮助
答案 0 :(得分:2)
似乎您只想使用特定的过滤器(@Number或@Name),如果它不为空:
SELECT
*
FROM
#tb_user ud
WHERE
(@Number = '' OR upper(ud.ID) like upper(@Number) + '%')
AND
(@Name = '' OR upper(ud.FName) like upper(@Name) + '%')
答案 1 :(得分:1)
您必须在OR
构造中对每个测试进行分组,参数为空(或任何检查 - 您在if
中执行的操作).. < / p>
SELECT
*
FROM
#tb_user ud
WHERE
(@Number = '' OR upper(ud.ID) like upper(@Number) + '%')
AND
(@Name = '' OR upper(ud.FName) like upper(@Name) + '%')
感谢@bartosz在初始答案逻辑中发现错误