ユニオンで結合された 3 つのクエリで構成されるストアド プロシージャがあります。これは機能します。現在、次のような値セットによる順序があります。
ORDER BY [CategoryTypeID], [SortOrder], [Name]
これを動的にしたいので、次のようなケースステートメントを使用してみました:
ORDER BY CASE WHEN @sort = 0 then [CategoryTypeID] ELSE [SortOrder] end
ただし、このSQLを実行すると、ステートメントにユニオンが含まれている場合、アイテムによる順序が選択リストに表示される必要があると不平を言います...など
ただし、パラメーターの使用を避けるために上記を変更すると、次のようになります。
ORDER BY CASE WHEN 0 = 0 then [CategoryTypeID] ELSE [SortOrder] end
それはうまくいきます。パラメータが実際に使用されていないときにパラメータを使用すると、なぜ不幸になるのですか? selectステートメントにパラメーターを含めようとしましたが、それでも同じエラーが発生しました。
case @sort when 1 なども試しましたが、同じ結果が得られました。そして、ストアド プロシージャでパラメータを宣言しました - @sort int = 0
これは MSSQL 2012 エクスプレスです。
編集 - 明確にするために
ORDER BY CASE WHEN @sort = 0 then [SortOrder] ELSE [CategoryTypeID] end
と
ORDER BY CASE WHEN @sort = 0 then [CategoryTypeID] ELSE [CategoryTypeID] end
これらのステートメントは両方とも、「選択リストに表示する必要があります」というエラーで失敗します。そして、私はこれらのステートメントの両方を同時に使用しようとしていませんでした。列自体が問題にならないように例として挙げるだけです。パラメータ自体が選択されていないか、ソートされていないにもかかわらず、問題と思われるパラメータを使用しています。