Я пишу SQL-запрос на основе пользовательского ввода, так как эти вводы будут меняться ежедневно.
Цель запроса — извлечь все данные только для идентификаторов из пользовательского списка. Пример ниже-
Однако я получаю следующую ошибку:
«Сбой преобразования при преобразовании varchar [...] в тип данных int»
Любая идея о том, как оптимально указать список и использовать этот список в предложении «ID in (..)»? Я попытался преобразовать список идентификаторов в строки, но все еще получаю аналогичную ошибку.
id_list = [12,16,22,42,1,24]
date = '2020-12-18'
query = (
"""
DECLARE @id varchar(1000), @date datetime
SET @id = '{}'
SET @date = '{}'
SELECT * from TABLE where ID in (@id) and Date = @Date
"""
.format(id_list,date))
Желаемый результат состоит в том, чтобы запрос мог получить список идентификаторов, которые можно было бы использовать в предложении.
идентификатор в @id
Я добавил тег SQL Server, потому что синтаксис похож на SQL Server.
@AsteroidsWithWings, спасибо за это - сделано.
SQL Server не поддерживает списки или массивы. Так что лучший метод - это таблица:
declare @id_list table (id int);
insert into @idlist (id)
values (12), (16), (22), (42), (1), (24);
Затем вы можете использовать это везде, где бы вы использовали табличную переменную. Например:
where id in (select id from @id_list)
есть ли более простой способ вставить vals в эту таблицу, может быть, через цикл? @Гордон
Если у вас есть значения в таблице, вы можете просто вставить их. Если вы хотите представить это как цикл, вы можете думать о «значении» как о «где». Или поместите их в строку и разделите строку.
это работает просто отлично. Спасибо за информацию @Gordon. Счастливых праздников
Вы имели в виду
.format(id_list, date)
? Вы распечатали SQL-запрос и сверили его с документацией на предмет правильности синтаксиса? Абстрагируйтесь от Python здесь, чтобы упростить ваш вопрос.