我有一个在 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 循环并使用单个值作为每个值的参数运行查询,但是数组中可能有一百个左右不同的值,而且单独查询它们似乎效率很低。
我读过另一个问题,其中有人提出了一种针对强类型 int 参数的解决方案,但是当与 String 值一起使用时,这种方法会让我对 SQL 注入感到紧张,特别是因为客户端很可能能够影响输入值。
您将如何实现此查询功能?
使用数据库详细信息编辑:
数据库是 SQL Server 2005。很抱歉忘记提及。