Как использовать предложение SQL IN в качестве параметра - PullRequest
0 голосов
/ 06 сентября 2018

Я попытался составить предложение SQL IN, используя python и pandas, и с помощью профилировщика SQL. Я обнаружил, что следующее передается из моей программы на python на сервер SQL, но данные не возвращаются - я предполагаю, что это вызывает внутреннюю ошибку из-за плохое форматирование, но я не могу определить проблему:

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 nvarchar(22)',N'
               SELECT [Date], [Person], [Amount]
               FROM [Logs].[dbo].[Results]
               WHERE [Date] >= GETDATE()-1 AND [Person] IN @P1',N'(''person1'', ''person2'')'
select @p1

Может кто-нибудь помочь мне определить, что не так?

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Я не верю, что вы можете указать в качестве параметра строку IN. Это, однако, будет работать на сервере SQL. Если это не sql, найдите аналогичную функцию или напишите свою собственную.

AND [Person] IN (select * from string_split(@P1,','))
0 голосов
/ 06 сентября 2018

После некоторого обзора и быстрого разговора с dbadmin я решил, что мне просто проще использовать python для динамического построения моего запроса. Спасибо за ваши усилия.

0 голосов
/ 06 сентября 2018

Вы можете попробовать несколько разных вещей здесь, чтобы диагностировать проблему:

  1. Сохраните запрос в строковую переменную, распечатайте его и запустите для базы данных.
  2. Если вышеуказанный шаг возвращает результаты, значит, проблема не в вашем запросе. Я бы тогда проверил конфигурацию базы данных, которую вы иметь место в вашем скрипте / файле конфигурации Python.
  3. Если конфигурация БД кажется правильной, добавьте попытку и кроме блока, чтобы захватить больше деталей относительно любого исключения что происходит.

Если вы используете pyodbc, проверьте следующую ссылку на посмотрите, как вы можете обрабатывать ошибки:

как перехватить конкретное сообщение об ошибке pyodbc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...