Оптимальный способ УСТАНОВИТЬ/ОБЪЯВИТЬ список в SQL-запросе?

Я пишу 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

Вы имели в виду .format(id_list, date)? Вы распечатали SQL-запрос и сверили его с документацией на предмет правильности синтаксиса? Абстрагируйтесь от Python здесь, чтобы упростить ваш вопрос.

Asteroids With Wings 18.12.2020 20:25

Я добавил тег SQL Server, потому что синтаксис похож на SQL Server.

Gordon Linoff 18.12.2020 20:26

@AsteroidsWithWings, спасибо за это - сделано.

yungpadewon 18.12.2020 20:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
1 969
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 в эту таблицу, может быть, через цикл? @Гордон

yungpadewon 18.12.2020 20:29

Если у вас есть значения в таблице, вы можете просто вставить их. Если вы хотите представить это как цикл, вы можете думать о «значении» как о «где». Или поместите их в строку и разделите строку.

Gordon Linoff 18.12.2020 20:54

это работает просто отлично. Спасибо за информацию @Gordon. Счастливых праздников

yungpadewon 18.12.2020 20:58

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