0

ESQL вычислительного узла производства IBM WebSphere Integration Bus содержит следующий запрос: ESQLESQL производит неправильный синтаксис около метки времени

SET result[] = 
    SELECT p.Id, p.Date, p.Value 
    FROM DatabaseName.dbo.TableName AS p 
    WHERE p.Date >= InputRoot.XMLNSC.ns:RequestType.Request.DateFrom 
    AND p.Date <= InputRoot.XMLNSC.ns:RequestType.Request.DateTo; 

DateFrom и DateTo описаны в XSD, как xsd:dateTime, и, следовательно, рассматривается как TIMESTAMP.
Интеграция шины производит следующий запрос:

SELECT p.Id, p.Date, p.Value 
FROM DatabaseName.dbo.TableName as p 
WHERE p.Date < TIMESTAMP'2016-01-02 00:00:00' and p.Date >= TIMESTAMP'2016-01-01' 

, которая является неправильным и приводит исключением

[IBM] [Драйвер ODBC SQL Server Wire Protocol] [Microsoft SQL Server]
Неправильный синтаксис около '2016-09-29 00:00:00'

Что более странно, тест IBM WebSphere работает хорошо и не генерирует этот странный «TIMESTAMP» pre fix, а шина интеграции производства - это полный клон тестовой виртуальной машины.

SQL Server версии тестовой и производственной удаленной базы данных и уровни ее совместимости одинаковы (SQL Server 2008 R2; 80).

Сведения об исключении:

Каталог =
Номер 'BIPmsgs' = 2322
Text = Child SQL исключение
File = «/ сборки/S1000_slot1/S1000_P/SRC/DataFlowEngine/MessageServices/ImbOdbc.cpp»
Line = 3776
Функция = 'ImbOdbcStatement :: checkRcInner'

SQL State = HY000
Исходный код ошибки = 102
Текст ошибки = [IBM] [драйвер протокола проводки SQL-сервера ODBC] [Microsoft SQL Server] Неверный синтаксис рядом с «2016-09-29 00:00:00».

+0

Можете ли вы уточнить, в какой базе данных возникает проблема? –

+0

@TimBiegeleisen Оба тестовых и производственных сервера - это SQL Server 2008 R2. –

ответ

0

Я использовал очевидный обходной путь - Я преобразовал TIMESTAMP в строку сам, и передал строку ESQL:

SET OutputLocalEnvironment.DateFromString = 
    CAST(requestNode.DateFrom AS CHARACTER FORMAT 'yyyy-MM-dd HH:mm:ss.SSS'); 
SET OutputLocalEnvironment.DateToString = 
    CAST(requestNode.DateTo AS CHARACTER FORMAT 'yyyy-MM-dd HH:mm:ss.SSS'); 

SET result[] = 
    SELECT p.Id, p.Date, p.Value 
    FROM DatabaseName.dbo.TableName AS p 
    WHERE p.Date >= OutputLocalEnvironment.DateFromString 
    AND p.Date <= OutputLocalEnvironment.DateToString; 

Он производит правильный запрос, но не решает проблему и не объясняет, почему он работает на тесте, но не работает.
Вопрос открылся.