SQL - «ЕСЛИ» в предложении Where - PullRequest
1 голос
/ 11 августа 2010

Я пытаюсь написать хранимую процедуру, которая будет иметь 6-битные флаги значений в качестве параметров и пару других значений.

Псевдо sql, который я хочу написать, выглядит примерно так:

SELECT *
FROM   theTable
WHERE  
       IF @flagA = 1 THEN theTable.A = 1
       IF @flagB = 1 THEN theTable.B = 1
       IF @flagC = 1 THEN theTable.CValue = @cValue
       etc

Любые идеи, как я могу сделать это в SQL или я лучше вернуться к созданию SQL в C # (откуда будет вызываться этот SP)?

1 Ответ

5 голосов
/ 11 августа 2010
SELECT * 
FROM   theTable 
WHERE   
   (@flagA = 0 or (@flagA = 1 AND theTable.A = 1 ))
    and (@flagB = 0 or (@flagB = 1 AND theTable.B = 1 ))
    and (@flagC = 0 or (@flagC = 1 AND theTable.CValue = @cValue ))

Примечание: я предполагаю, что ваши битовые флаги не имеют значения NULL. Если это не так, вам нужно будет использовать ISNULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...