1

MS SQL サーバー 2008 を使用しています。

次のようなクエリがあります。

SELECT * FROM #PreModuleAllData WITH(NOLOCK)
WHERE (@Country   != 'DEFAULT' AND @Country   != '' AND([Language] = @Country ))
OR    (@UserType  != 'DEFAULT' AND @UserType  != '' AND([UserType] = @UserType ))
OR    (@Group     != 'DEFAULT' AND @Group     != '' AND([Company] = @Group ))
OR    (@CodeUsage != 'DEFAULT' AND @CodeUsage != '' AND([User Code]= @CodeUsage ))

計画では、パラメータのいずれかが「」またはデフォルトに設定されている場合、すべてのデータを返す予定でした。パラメータが使用された場合、その特定の where 句に基づいて返されます。

たとえば、パラメータ @country が言語、つまり英語に設定されている場合、クエリはデータを返します。

しかし、すべてのパラメーターがデフォルトに設定されている場合、何も返されませんが、すべてのレコードが返される必要があります。ロジックに非常に単純なものが欠けているように感じますが、その理由はわかりません。

手がかりはありますか?

4

3 に答える 3

4

これを試して:

SELECT * FROM #PreModuleAllData WITH(NOLOCK)
WHERE (@Country   = 'DEFAULT' OR @Country   = '' OR ([Language] = @Country ))
AND   (@UserType  = 'DEFAULT' OR @UserType  = '' OR ([UserType] = @UserType ))
AND   (@Group     = 'DEFAULT' OR @Group     = '' OR ([Company] = @Group ))
AND    (@CodeUsage = 'DEFAULT' OR @CodeUsage = '' OR ([User Code]= @CodeUsage ))
于 2013-07-03T10:17:15.010 に答える
0

以下のようにロジックを書き直す必要があります

SELECT * FROM #PreModuleAllData WITH(NOLOCK)
WHERE (@Country   = 'DEFAULT' OR @Country   = '' OR (@Country NOT IN ('DEFAULT','') AND [Language] = @Country ))
OR    (@UserType  = 'DEFAULT' OR @UserType  = '' OR (@UserType NOT IN ('DEFAULT','') AND [UserType] = @UserType ))
OR    (@Group     = 'DEFAULT' OR @Group     = '' OR (@Group NOT IN ('DEFAULT','') AND [Company] = @Group ))
OR    (@CodeUsage = 'DEFAULT' OR @CodeUsage = '' OR (@CodeUsage NOT IN ('DEFAULT','') AND [User Code]= @CodeUsage ))
于 2013-07-03T10:21:52.647 に答える
0

where句にブール条件が必要です:

WHERE ((@Country = 'DEFAULT') OR @Country!= 'DEFAULT' AND @Country != '' AND([Language] = @Country ))
AND

パラメータ country が でない場合、defaultその条件が適用されます。それ以外の場合、パラメーターがデフォルトの場合、2 番目の条件はスキップされます。

于 2013-07-03T10:18:28.447 に答える