Можно ли использовать параметры запроса для заполнения ключевого слова 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 является встроенным табличным значением, а не множественным оператором.)

Другие вопросы по тегам