В качестве части моих заданий мне нужно написать SQL-запросы для подключения к нашей базе данных PI. Чтобы сгенерировать запрос, мне нужно передать массив тегов (по существу первичных ключей), но они должны быть вставлены в виде строк.Заполнитель SQL в WHERE IN проблема, вставленные строки сбой
Поскольку это будет модульный запрос и используется для нескольких тегов, используется заполнитель.
Запрос основывается на использовании WHERE IN заявление, которое когда заполнитель, как показано ниже:
SELECT SUM(value * 5/1000) as "Hourly Flow [kL]"
FROM piarchive..pitotal
WHERE tag IN (?)
AND time between ? and ?
AND timestep = '1d'
AND calcbasis = 'Eventweighted'
AND value <> ''
Вопрос формат, в котором метки должны быть переданы в качестве. Если добавить их непосредственно в запрос (для тестирования), они идут в формате (это номер примеров): '000000012','00000032','005050236','4560236'
и запрос выглядит следующим образом:
SELECT SUM(value * 5/1000) as "Hourly Flow [kL]"
FROM piarchive..pitotal
WHERE tag IN ('000000012','00000032','005050236','4560236')
AND time between ? and ?
AND timestep = '1d'
AND calcbasis = 'Eventweighted'
AND value <> ''
... который работает.
Если я попытаюсь добавить те же теги в заполнитель, запрос не удастся. Если я добавляю только 1 тег, без кавычек (с использованием заполнителя), запрос работает.
Почему это происходит? Во всяком случае, вокруг?
Для какой базы данных? В предложениях Dynamic IN требуется использовать динамический SQL или функцию для преобразования предложения IN в таблицу для присоединения к. –
Это для базы данных PI, от OSIsoft. На самом деле это не реляционная БД, но драйвер OLEDB позволяет использовать обычный SQL –
@Alistair Pitts: если в PI нет встроенной поддержки динамического SQL, вы можете построить запрос как строку на любом используемом вами языке приложения. –