生产的ESQL计算节点IBM WebSphere集成总线包含以下ESQL查询:
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
。
Integration bus产生以下查询:
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有线协议驱动程序] [Microsoft SQL Server]
附近的语法不正确
2016-09-29 00:00:00&#39;
更奇怪的是,测试IBM WebSphere运行良好并且不会产生这种奇怪的#TIM; TIMESTAMP&#34;前缀,而生产集成总线是测试集成总线虚拟机的完整克隆。
测试和生产远程数据库的SQL Server版本及其兼容级别相同(SQL Server 2008 R2; 80)。
例外详情:
目录=&#39; BIPmsgs&#39;
数字= 2322
Text =子SQL异常
File =&#39; /build/S1000_slot1/S1000_P/src/DataFlowEngine/MessageServices/ImbOdbc.cpp'
线= 3776
函数=&#39; ImbOdbcStatement :: checkRcInner&#39;SQL State = HY000
本机错误代码= 102
错误文本= [IBM] [ODBC SQL Server有线协议驱动程序] [Microsoft SQL Server]在2016-09-29 00:00:00&#39;附近语法不正确。
答案 0 :(得分: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;
它产生了正确的查询,但没有解决问题,也没有解释为什么它在测试中起作用,但不在生产上。
问题是公开的。