0

ユーザー指定のパラメーターに応じて結果を返すレポートを作成しています。レポート パラメータは 3 つあります。1 つは「場所」のドロップダウンで、残りの 2 つは「user_id」とユーザーの姓または名で検索するテキスト パラメータです。これは私が現在使用しているものです:

SELECT * 
FROM UserTable1
WHERE Location = @Location
AND (user_id LIKE '%'+@SearchUserID+'%'
AND first_name LIKE '%'+@SearchUserName+'%' 
OR last_name LIKE '%'+@SearchUserName+'%')

ユーザーが @SearchUserID パラメータ フィールドを空白のままにした場合、すべての user_ids が返されます (他の 2 つのパラメータを満たすもの)。指定すると、user_id にその部分文字列を持つ user_id が返されます。@SearchUserName パラメータ フィールドについても同じことが言えます。空白のままにすると、他のパラメーターを満たすすべてのユーザーが返されます。指定した場合、first_name または last_name にその部分文字列を持つすべてのユーザーを返す必要があります (ただし、他のパラメーターを満たす結果のみ)。両方を空白のままにすると、すべてのユーザーが返されます。

上記のクエリが機能していません。@SearchUserName パラメーターを満たす結果を返すだけのようですが、@SearchUserID パラメーターは無視されます。これを修正する方法はありますか?式を使用して、@SearchUserID フィルターを Tablix 自体に配置しました: =" " & Parameters!SearchUserID.Value & " " しかし、これによりパフォーマンスが大幅に低下しました..

4

1 に答える 1

2

これを試して。NULLパラメータが空白(空)の場合は渡す必要があります。

SELECT * 
FROM UserTable1
WHERE Location = @Location
AND (user_id LIKE '%'+@SearchUserID+'%'
       OR @SearchUserID IS NULL
    )
AND (first_name LIKE '%'+@SearchUserName+'%'
       OR last_name LIKE '%'+@SearchUserName+'%'
       OR @SearchUserName IS NULL
    )

「....ただし、@SearchUserID パラメータは無視されます。」のデータ型はuser_id?

于 2013-02-04T14:53:44.313 に答える