2010-07-13 101 views
0

我正在使用SQL Server 2005與asp.net C#。有沒有辦法避免TSQL中的條件?

我的網站上有一個搜索查詢使用不同的參數。

fromAge as tinyint 
toAge as tinyint 
fromHeight as tinyint 
toHeight as tinyint 
gender as tinyint 
withImage as bit 
region as tinyint 
astrologicaSign as tinyint 

我從第一次使用這些參數進行搜索和拯救自己的搜索喜好搜索表,然後在Users表從我選擇符合要求滿足用戶使用。

問題是一些值可以有條件像例如withImage(位)這意味着現在我需要有if語句,檢查我是否提供0或1 withImage,然後執行選擇ie。如果withImage = 1,那麼查詢的位置將是圖片1 <>'0',否則根本沒有條件。

我確實以10個嵌套if語句結束了初始查詢(我簡化了這個例子)。

是否有辦法避免它,除了動態SQL?

回答

1

如果你可以對齊你逝去的是爲要中檢索值的參數值(或至少經常做的等於比較),那麼你可以使用CASE WHEN相當efectively這樣

SELECT * FROM User 
WHERE picture1 = CASE WHEN @WithImage = 1 THEN @withImage ELSE picture1 END 

這樣,它是比較picture1字段與參數,如果它是1或比較該字段與自身,如果它不是。

2

這是使用AND語句

SELECT * FROM User 
WHERE (withImage =1 AND picture1<>'0') OR withImage=0 

然後,您可以添加類似的條款爲每個元素很簡單地實現。請注意,如果邏輯變得更復雜,您還可以在WHERE子句中使用CASE語句。

+0

什麼,但如果聲明。想想10個嵌套的if。 – eugeneK 2010-07-13 12:04:36

0

其他人已經給你一個解決方案,但誠實,這是動態SQL可能提高性能的一種情況。我不是一個很大的動態SQL粉絲,但是這是一個比其他任何事情都做得更好的案例。

+0

真的嗎?你確定。動態SQL更難以完全調試,更不用說SQL注入等。 關於性能,查詢優化器應該處理這個絕對精細的跳過沒有值傳遞的謂詞。 – 2010-07-15 00:11:55

+0

http://www.sommarskog.se/dyn-search-2008.html – HLGEM 2010-07-15 13:39:29

相關問題