在SQL CASE语句中使用IF ELSE和OR的混合

时间:2015-04-29 02:56:46

标签: sql sql-server

只是想确认一下,如果这是在SQL中使用IF ELSE OR语句的正确方法吗?

CASE DB_NAME() WHEN 'dbName' THEN 'value1' ELSE 'value2-a' OR 'value2-b'

基本上我想做一个声明,如果dbName是正确的,那么它将采用value1,否则它将采用value2-a或value2-b。

我想在我的存储过程中实现这个语句。

3 个答案:

答案 0 :(得分:1)

SQL Server没有if else或选项。 select语句中的每个项都需要计算为一个值。您无法为一个字段获取两个唯一值。

如果您想在CASE WHEN语句中有多个选项,可以重复使用WHEN关键字。

例如

         SELECT CASE WHEN DB_NAME() = 'PROD' THEN value1
              WHEN DB_NAME() = 'DEV' THEN value2-a
              ELSE value2-b END DbValue

答案 1 :(得分:1)

CASE有两种类型,简单和搜索。你可以一起使用。如果CASE没有选项ELSE,则返回NULL。尝试这样的事情:

SELECT...
FROM...
WHERE
    CASE DB_NAME() -- simple case
        WHEN 'dbName' THEN
            CASE value WHEN 'value1' THEN 1 END -- simple case
        ELSE
            CASE WHEN value IN ('value2-a', 'value2-b') THEN 2 END  -- searched case
    END IS NOT NULL

或者这个:

SELECT
    CASE DB_NAME() -- simple case
        WHEN 'dbName' THEN
            CASE value WHEN 'value1' THEN value END -- simple case
        ELSE
            CASE WHEN value IN ('value2-a', 'value2-b') THEN value END  -- searched case
    END AS value
FROM...

MSDNCASE上的内容更多。

答案 2 :(得分:0)

我怀疑你想要这样的逻辑:

WHERE (db_name() = 'prod' and value = 'value1') OR
      (db_name() <> 'prod' and value in ('value2-a', 'value2-b'))