在条件中添加IF / CASE语句

时间:2013-12-16 13:44:04

标签: sql sql-server

不知道我们是否可以在条件中添加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条件。(实际查询有很多东西)

提前感谢您提供任何帮助

2 个答案:

答案 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在初始答案逻辑中发现错误