此问题类似于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
检查然后构建我的查询,但我想避免这种情况。
答案 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
我认为其他两个领域是州和位置。