0

私は、ユーザーがフォーラム内のユーザーを性別、年齢、言語、ユーザーの興味によって検索できるシステムを構築しています。

私はこのストアドプロシージャを持っています:

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など)のいずれかが空として指定された場合、ステートメントにそれらが含まれないようにする方法はありますか?

4

2 に答える 2

2

「空」の意味によって異なります。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)
于 2012-04-27T17:12:17.240 に答える
2

私はこれに何度も遭遇しました。

試す:

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

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

しかし、それはレコードが多すぎる可能性があります。

于 2012-04-27T17:16:12.373 に答える