2010-08-11 3 views
1

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

псевдо 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# (где это СП будет называться из)?

ответ

5
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.

+0

Это не тот, который должен быть динамическим, но предложение where. Я не думаю, что это отвечает на мой вопрос –

+0

@David: см. Мое обновление: – RedFilter

+0

Отлично, именно то, что я искал –