ASP.NET ページで実行している SQL クエリがあります。最終的に解析された SQL には、WHERE [columnname] IN [values]
形式の文字列値のリストが含まれている必要があります。たとえば、最終的なクエリは次のようになります。
SELECT PRODUCTNAME FROM PRODUCT WHERE PRODUCTCODE IN ('ABC','DEF','GHI','JKL', /* etc */);
ただし、WHERE 句の文字列値は動的である必要があります。通常、コードを便利で安全にするためにパラメータ化されたクエリを使用するので、概念的には次のようにしたいと思います。
String[] productCodes = { "ABC", "DEF", "GHI", "JKL" };
SqlCommand cmd = "SELECT PRODUCTNAME FROM PRODUCT WHERE PRODUCTCODE IN (@ProductCodes)";
cmd.Parameters.Add("@ProductCodes", productCodes);
ただし、この種の機能は .NET には存在しないようです。これを実装するにはどうすればよいですか?配列で foreach ループを使用し、各値のパラメーターとして 1 つの値を使用してクエリを実行することもできますが、配列には 100 ほどの異なる値が存在する可能性があり、それらを個別にクエリするのは非常に非効率的です。
誰かが強く型付けされた int パラメータの解決策を提案した別の質問を読みましたが、特にクライアントが入力値に影響を与える可能性が非常に高いため、文字列値で使用すると、その方法は SQL インジェクションについて不安になります。
このクエリ機能をどのように実装しますか?
DBの詳細で編集:
データベースは SQL Server 2005 です。言い忘れてすみません。