2010-08-11 123 views
1

我想寫一個存儲過程,將有6位值標誌作爲參數和一些其他值。SQL - 「IF」在哪裏條款

僞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將被稱爲)?

回答

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)) 

注:我假設你的位標誌是不可空的。如果情況並非如此,則需要使用ISNULL

+0

它不是需要動態選擇,而是where子句。我不認爲這回答我的問題 – 2010-08-11 15:38:54

+0

@大衛:看我的更新: – RedFilter 2010-08-11 15:39:26

+0

非常好,我正在尋找 – 2010-08-11 16:05:00