Мне нужно настроить систему, которая предоставляет мне область для ввода операторов SQL. Эти операторы могут иметь не связанные с SQL переменные. Важно заметить, что мы не можем изменить систему, которую мы настраиваем.Конфигурирование динамического SQL-запроса SQL «IN» в системе с заранее заданными переменными
Таким образом, система дает нам {0}
, {1}
, {2}
ведьма та же система заменит следующее исполнение:
{0}
->string1
{1}
->string2
{2}
->'string3','string4','string5'
(или столько, сколько необходимо)
Запрос мы настроить выглядит следующим образом:
Select col1
from table1
where col2 = '{0}' and col3 = '{1}' and col4 in ({2})
, который производит это при выполнении:
Select col1
from table1
where col2 = 'string1' and col3 = 'string2'
and col4 in ('string3', 'string4', 'string5')
В новом требовании мы должны использовать различные столбцы для фильтрации этих 3-х параметров. Поэтому первоначальная идея заключалась в использовании динамического SQL.
Проблема теперь в {2}
, поскольку мы не смогли перехватить ее значение из окна конфигурации в достаточно хорошем формате.
Мы пытались использовать:
declare @mylist
set @mylist = {2}
, но это приводит к неправильному высказыванием:
declare @mylist
set @mylist = 'string3','string4','string5'
еще одна попытка была сделать:
declare @sql
set @sql = 'Select '+ @myCol1 +' from table1 where '+ @myCol2 +' = '''{0}''' and '+ @myCol3 +' = '''{1}''' and '+ @myCol4 +' in ({2})'
exec sp_executesql @sql
, но это приводит к следующим неверный оператор внутри @sql
(ошибка не удваивается '
, что пришли из {2}
:
'Select col1 from table1 where col2 = ''string1'' and col3 = ''string2'' and col4 in ('string3','string4','string5')'
Есть ли альтернатива для того, что я пытаюсь сделать?
Я бы очень признателен за помощь.
Это выглядит как заполнители форматирования строки .NET, но я могу ошибаться - поэтому, если ваш оператор содержит * несколько * заполнителей с тем же номером (например, 'WHERE col4 IN ({2}) ИЛИ col5 IN ({2}) '), оба они будут заменены одним и тем же списком? Кроме того, сколько разных столбцов мы можем иметь? (Это легко перечисляемый набор возможностей)? –