如果变量是空白则没有条款[多个]

时间:2016-03-30 13:28:33

标签: sql sql-server sql-server-2008

此问题类似于this一个

唯一的区别是我有3 sql parameter我将默认值设为null, 如果用户提供任何这些值,它们应包含在where子句中 这是存储过程:

 create procedure [dbo].[SearchCareer] 
@country int =null,
@state int =null,
@position int=null
as

begin 
 SELECT * FROM Careers  where  Location=@country and @state=@state and @position=@position
end

我尝试过这种方法:

begin 
 SELECT * FROM Careers  where 
        ((@position is null and Position is null)
     or (Position = @position)) and
        ((@country is null and Location is null)
     or (Location = @country)) and 
        ((@state is null and StateID is null)
     or (StateID = @state))
end

当用户只输入位置但在其他情况下无法工作时,它可以正常工作。

我知道我可以使用IF , ELSE IF检查然后构建我的查询,但我想避免这种情况。

2 个答案:

答案 0 :(得分:1)

这可能与你的想法很接近。如果表格很大,这种方法的性能可能会成为问题。我不得不在这里做一些猜测,因为你做的事情就是检查一个变量是否等于同一个变量。

SELECT * --You really should use only the columns you need instead of *
FROM Careers  
where (Location = @country OR @country is null)
and ([state] = @state OR @state is null)
and (position = @position or @position is null)

答案 1 :(得分:-1)

这将做你想要的:

SELECT * FROM Careers  where  case @country when is null THEN @country ELSE Location end=@country and case @state when is null THEN @state ELSE State end=@state and case @position when is null THEN @position ELSE Position end=@position

我认为其他两个领域是州和位置。