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