@p
呼び出されたときにストアドプロシージャに渡されるパラメーターに基づいて、SQLServerでステートメントを実行したいと思います。
@p
の値が1の場合、テーブルのデータは[a]
フィルタリングされません@p
。値が0の場合、テーブル[a]
のデータはテーブルのデータに基づいてフィルタリングされます[b]
。ただし、データはペア比較を使用して比較する必要があります。
SQL Serverがペアワイズ比較をサポートしている場合、この構文を使用してこれを行うことができます
SELECT
*
FROM
a
WHERE
(@p = 1) or ((a.col1, a.col2) in (SELECT col1, col2 FROM b))
ただし、残念ながらSQLServerはペアワイズ比較をサポートしていません。
ifステートメントを使用してそれを行うこともできます。
if(@p=1)
begin
SELECT
*
FROM
a
end
else
begin
SELECT
*
FROM
a join b on a.col1=b.col1 and a.col2=b.col2
end
ただし、ストアドプロシージャが長くなりすぎます。それを行うための別の回避策はありますか?