SQL查询的WHERE子句中的IF或CASE

时间:2017-02-28 09:10:57

标签: sql sql-server vb.net

我的问题是我有这样的查询:

SELECT * FROM TABLE1 WHERE STATUSID = @PARAMETER

然后我想将这个查询创建为动态的查询:

IF @PARAMETER IS 1 THEN STATUSID = 1
IF @PARAMETER IS 2 THEN STATUSID = 2
IF @PARAMETER IS 3 THEN STATUSID = 1 OR STATUSID = 2

任何人都可以给我一个示例查询如何做到这一点?我只想在WHERE子句中执行此操作,以便最小化我的代码行。

3 个答案:

答案 0 :(得分:3)

使用OR

SELECT * 
FROM TABLE1 
WHERE (STATUSID = 1 and @PARAMETER = 1)
OR (STATUSID = 2 and @PARAMETER = 2)
or (STATUSID in (1,2) and @PARAMETER = 3)

答案 1 :(得分:3)

Use CASE Clause to get result :  

SELECT * FROM TABLE1 WHERE STATUSID = CASE 
  WHEN @PARAMETER = 1 THEN 1 
  WHEN @PARAMETER = 2 THEN 2
  WHEN @PARAMETER = 3 THEN STATUSID END

答案 2 :(得分:2)

另一种解决方案是首先检查参数,然后执行相应的查询。

IF @PARAMETER = 1 THEN SELECT * FROM TABLE1 WHERE STATUSID = 1
IF @PARAMETER = 2 THEN SELECT * FROM TABLE1 WHERE STATUSID = 2
IF @PARAMETER = 3 THEN SELECT * FROM TABLE1 WHERE STATUSID = 1 OR STATUSID = 2

引擎优化是否最简单。