Можно ли использовать параметры запроса для заполнения ключевого слова IN?
Представьте себе таблицу с GUID в качестве первичного ключа. Я хотел бы выбрать несколько из этих строк на основе их первичного ключа. Я хотел бы использовать запрос как:
SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere');
Я использую ADO.NET для запросов к базе данных, поэтому я хотел бы использовать параметризованный запрос вместо динамического SQL, который, очевидно, будет работать, но я хочу сохранить преимущества параметризованных запросов (безопасность, экранирование и т. Д.),
Можно ли заполнить коллекцию для IN-предложения, используя sql-параметры?
1 ответ
Вы можете передать список идентификаторов GUID в виде строкового параметра, разделенного запятыми, и использовать UDF с табличным значением, чтобы разделить их на таблицу для использования в вашем IN
пункт:
SELECT *
FROM my_table
WHERE id IN (SELECT id FROM dbo.SplitCSVToTable(@MyCSVParam))
Эрланд Соммарског (Erland Sommarskog) имеет интересную статью с примерами того, как разбивать строки через запятую на таблицы с использованием UDF.
(Из соображений производительности вы должны убедиться, что ваш UDF является встроенным табличным значением, а не множественным оператором.)