У меня есть запрос SQL, который я выполняю на странице ASP.NET. Окончательный анализируемый 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-параметров , но этот метод заставил бы меня нервничать по поводу SQL-инъекции при использовании со значениями String, тем более что клиент может очень хорошо уметь влиять на входные значения.
Как бы вы реализовали эту функцию запроса?
РЕДАКТИРОВАТЬ с подробностями БД :
База данных - SQL Server 2005. Извините, что забыл упомянуть об этом.