シンプルで不満なシナリオがあります。SQL Server:条件付き列(出力スキーマの変更)
簡体
create procedure [dbo].[test]
@bShow bit = 0
as
begin
if(@bShow = 0)
SELECT name, surname
FROM table_person
ELSE
SELECT name, surname, email
FROM table_person
end
は、私は、動的SQLを使用して追加の列を表示するかどうかを判断するために条件付き文字列として全てを包むことができます知っています。
また、追加の列を含む#tempテーブルにすべてのデータをダンプし、条件が満たされずにtempテーブルからすべてを選択するだけでその列を削除することもできます。
しかし、上記には他の意味がありますが、動的SQLはSQLが自分のプロシージャを最適化してキャッシュしないことを意味します。また、2番目の方法(#tempから不要なドロップ)は、使用されているかどうかにかかわらず検索されます。
2つの別々の選択肢を持つif文を使用することもできますが、SQLのポスト最適化では、procが実行されるたびに異なる実行パスが使用されるため理想的ではありません。
私の特定の要件の追加の列は、パフォーマンスに大きな影響を与えるむしろ課税計算です。したがって、必要な場合にのみパラメータを表示するために、ピボットテーブルを使用して追加列を結合します。
私はCTEとサブクエリを試してきました。
アドバイスはありますか?