私のレポートは、次の 2 つの値のいずれかを受け入れます。
- ALL を示す文字列「*」、または
- 個人の ID を示す整数
だから、基本的に、私はクエリを持っています:
SELECT * FROM people where personid = ?
整数を渡すとレポートは完全に実行されますが、すべてを示す * を渡すとレポートが壊れます。また、クエリをそのままにして文字列を渡すと意味がありません。すなわちこれは動作します:
SELECT * FROM people where personid = 5
しかし、これはしません:
SELECT * FROM people where personid = *
- パラメータが渡された場合に「すべて」を返すようにこれを書き直すにはどうすればよいですか? つまり、値が * の場合は where 句を完全に無視できますが、値が整数の場合は where を実行する必要があります。
現在、エラーが発生した場合:
* を -1 に変更できます。したがって、別の方法は、-1 が渡された場合に制約を無視するように SQL を書き直すことです。次のようなもの:
SELECT * FROM people WHERE (param = -1 OR (param != -1 AND personid = param) )
..しかし、これはうまくいかないようですか?