2012-04-27 45 views
0

我正在構建一個系統,用戶可以通過性別,年齡語言和用戶興趣搜索論壇中的用戶。T-SQL搜索結果OR/AND條件

我有這個存儲過程:

ALTER PROCEDURE dbo.FindFriends 
    (
    @language int, 
    @country nvarchar(50), 
    @sex int, 
    @ageFrom int, 
    @ageTo int, 
    @category nvarchar(50) 
    ) 
AS 
    SELECT u.*, cat.* 
    FROM [User] AS u 
    INNER JOIN categories AS cat ON u.user_id=cat.user_id 
    WHERE (age_presenentation BETWEEN @ageFrom AND @ageTo) AND [email protected] AND [email protected] AND [email protected] 

這種說法是我想要的。但有時,用戶可能無法進入某些字段。例如,用戶可能僅通過類別搜索用戶。這將導致沒有用戶出現,因爲我使用「And」運算符。有沒有一種方法來結合邏輯,以便如果任何sql變量(例如@category,@angeTo)被賦予爲空,那麼語句將不包含它們?

回答

2

我已經跑了很多次了。

嘗試:

WHERE (age_presenentation BETWEEN @ageFrom AND @ageTo) 
AND ((@language IS NULL) OR ([email protected])) 
AND ((@sex IS NULL) OR ([email protected])) 
AND ((@category IS NULL) OR ([email protected])) 

You can apply the same logic to the @ageFrom as well: 
((@ageFrom IS NULL) OR (age_presenentation BETWEEN @ageFrom AND @ageTo)) 

但是,這可能是太多記錄。

+0

你有一個小錯誤..它是變量語言不行話..在第二行..非常的解決方案 – 2012-04-27 17:18:38

+0

你是對的,我的壞。我編輯過它。 – NickV 2012-04-27 17:27:09

2

這取決於你的意思是「空」。如果你的意思是NULL,那麼試試這個:

WHERE age_presenentation BETWEEN @ageFrom AND @ageTo 
AND ([email protected] OR @language IS NULL) 
AND (sex[email protected] OR @sex IS NULL) 
AND ([email protected] OR @category IS NULL) 
+0

我認爲你的解決方案將是satsifactory。我沒有想過這個..我可以將變量設置爲null無論如何..與asp.net編程...感謝 – 2012-04-27 17:16:50

+0

最好的做法是先檢查IS NULL。 – NickV 2012-04-27 17:50:20