値のリストに関連付けられているすべての行を返したいクエリがあります。これは次のように非常に簡単に記述できます。
select * from TableA where ColumnB in (1, 2, 3, 5)
このクエリを C# で生成して実行できます。ただし、これはパラメーターを使用しないため、明らかに理想的とは言えません。クエリ プランをキャッシュしようとすると問題が発生し、SQL インジェクション攻撃に対して明らかに脆弱です。
別の方法は、これを次のように書くことです。
select * from TableA where ColumnB = @value
これは C# で何度も実行できますが、これにより N DB ヒットが発生します。
私が見ることができる他の唯一の選択肢は、一時テーブルを作成してそのように結合することですが、これはより複雑になり、最初のオプションと同じ制限を受けるため、この点はわかりません。
SQL サーバーと OLDB を使用していますが、クエリの作成は問題ではありません。私は最も効率的なプロセスを作成しようとしています。
これらの 3 つの方法のうち、より効率的なのはどれですか? 代替手段を逃しましたか?