2010-09-08 48 views
1
select * from table where [email protected] 

我不確定這是多麼容易,但我無法繞過它。我希望能夠更改上述查詢的where子句,以便如果使用0而不是1-2-3或4作爲@categoryid,它將選擇所有類別。我在數據庫中沒有任何類別爲0。SQL服務器有條件的地方

回答

2

當你要選擇所有類別的只是修改選擇這樣

select * from table where category= ISNULL(@categoryid, category) 
+0

不完全回答這個問題,但它很乾淨呃比馬特吉布森的方法,但需要在客戶端的幾個修改。 – 2010-09-08 14:51:01

-2

這是SQL不是PL/SQL您可以將其設置爲NULL。 在發送請求之前,您需要測試該值,您不能要求SQL爲您進行測試。

+2

我低估了你,因爲我無法理解你的論點。 – 2010-09-08 14:49:09

+0

夠公平的,好像我這次說過我的話:D – MaxouMask 2010-09-16 07:59:30

3

這或許應該被分成2個獨立的查詢,除非你真的想要一個完整的聚集索引掃描的同一個執行計劃的情況下均可使用的是@categoryid=0@categoryid<>0

通過劃分成2個獨立的查詢,你會潛在地允許@categoryid不爲零的那些通過索引查找來滿足,而不是完全掃描。

如果表格很小或者@categoryid不是很有選擇性,那麼它可能不是問題。

1
select * from table where 
category BETWEEN @mincategoryid AND @maxcategoryid 

最小和最大將之一

  • 都爲1(或2或3或4)
  • 分別爲0和一個高數

這將使用索引太..

+0

+1我喜歡這個解決方案。當列的值爲空時, – 2010-09-08 15:07:51

+0

將不起作用 – 2010-09-08 18:09:02

+0

@KM:雖然聽起來像不可空列 – gbn 2010-09-08 19:22:28