Hardevsinh Mori Ответов: 1

Как передать список строк в предложение in в SQL C#?


у меня есть такая струна:
string ids=170801/1, 170801/2, 170801/3 << это будет динамический не фиксированный

Теперь я хочу разобрать запрос примерно так:
select min(value) from tab where id in(ids)


но это ничего не дает

я пытаюсь передать строку в In cluase, но безрезультатно

Что я уже пробовал:

я пробовал разбить строку и создать массив, но это не имеет никакого выхода

1 Ответов

Рейтинг:
11

OriginalGriff

Есть два способа сделать это: один быстрый и грязный (и, вероятно, небезопасный, если ваши данные динамичны) и один сложный и чистый.

Самое быстрое и грязное-это использовать конкатенацию строк:

string rawCSV = "170801/1,170801/2,170801/3";
string ids = string.Join(",", rawCSV.Split(',').Select(s => "'" + s + "'"));
Затем вы можете использовать эту строку как часть предложения WHERE:
string sql = "SELECT MIN(value) FROM tab WHERE Id IN (" + ids" + ")";

Но ... если ваши данные динамичны, это опасно - это оставляет вас широко открытыми для SQL-инъекций, которые могут повредить или уничтожить вашу базу данных.

Лучшее решение гораздо сложнее.
Вам нужно создать хранимую процедуру, которая принимает строковый параметр.
Затем он разбивает его и создает из него табличные данные.
Видеть здесь: Использование разделенных запятыми строк параметров значений в предложениях SQL IN[^]


[no name]

сэр я уже читал вашу статью но не могу понять как использовать эту функцию в моей ситуации

[no name]

И спасибо, сэр, это работает.

OriginalGriff

Пожалуйста!