要件を次のように翻訳できます:
SELECT route_id [ROUTE_ID]
FROM route_master(NOLOCK)
WHERE route_ou = 2
AND (@l_s_query is null OR route_query = @l_s_query)
AND lang_id = 1
OPTION (RECOMPILE)
OPTION (RECOMPILE)
オプションですが、トピック T‑SQLの動的検索条件
またはCOALESCE()
OR
を避けるため :
WHERE route_ou = 2
AND COALESCE(@l_s_query,route_query) = route_query
AND lang_id = 1
注: @jarlhが言ったように、route_query
null許容型の場合、null比較のためにいくつかの問題が発生する可能性があるため、最初のクエリを使用することをお勧めします。
このもう1つのオプションは、UNION ALL
を使用した2つの個別のクエリです。 、条件ごとに1つ-
SELECT .. FROM ..
WHERE @l_s_query IS NULL
UNION ALL
SELECT .. FROM ..
WHERE @l_s_query = route_query
パフォーマンスの観点から、最後の1つだけがインデックスを使用し、最初の1つが最速になると思いますが、インデックスのデパン、テーブルのサイズなどが変わる可能性があります。