Asp.net T-SQL搜索结果或/和条件

Asp.net T-SQL搜索结果或/和条件,asp.net,tsql,Asp.net,Tsql,我正在建立一个系统,用户可以在论坛中按性别、年龄、语言、用户兴趣搜索用户 我得到了这个存储过程: ALTER PROCEDURE dbo.FindFriends ( @language int, @country nvarchar(50), @sex int, @ageFrom int, @ageTo int, @category nvarchar(50) ) AS SELECT u.*, cat.* FROM [

我正在建立一个系统,用户可以在论坛中按性别、年龄、语言、用户兴趣搜索用户

我得到了这个存储过程:

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 lingo=@language AND sex=@sex AND cat.category_name=@category

这句话正是我想要的。但有时,用户可能无法输入某些字段。例如,用户可能只按类别搜索用户。。这将导致没有用户出现,因为我使用的是“And”操作符。是否有一种方法可以组合逻辑,以便在任何sql变量(例如@category、@angeTo)为空时,语句将不包含它们

这取决于你所说的“空”是什么意思。如果您的意思是NULL,请尝试以下方法:

WHERE age_presenentation BETWEEN @ageFrom AND @ageTo
AND (lingo=@language OR @language IS NULL)
AND (sex=@sex OR @sex IS NULL) 
AND (cat.category_name=@category OR @category IS NULL)

这取决于你所说的“空”是什么意思。如果您的意思是NULL,请尝试以下方法:

WHERE age_presenentation BETWEEN @ageFrom AND @ageTo
AND (lingo=@language OR @language IS NULL)
AND (sex=@sex OR @sex IS NULL) 
AND (cat.category_name=@category OR @category IS NULL)

我已经遇到过很多次了

尝试:


但这可能是太多的记录了。

我已经多次遇到过这种情况

尝试:


但这可能是太多的记录。

我认为您的解决方案应该是satsifactory。我还没想过那件事。。无论如何,我可以将变量设置为null..通过asp.net编程..谢谢首先检查是否为null是最好的做法。我认为您的解决方案应该是satsifactory。我还没想过那件事。。无论如何,我可以将变量设置为null..使用asp.net编程..谢谢首先检查是否为null是最佳做法。您有一个小错误..这是变量语言不是行话..在第二行..很好的解决方案您有一个小错误..这是变量语言不是行话..在第二行..很好的解决方案