【问题标题】:ESQL produces incorrect syntax near timestampESQL 在时间戳附近产生不正确的语法
【发布时间】:2016-09-29 04:47:19
【问题描述】:

生产 IBM WebSphere 集成总线的 ESQL 计算节点包含以下 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;

DateFromDateTo 在 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 有线协议驱动程序][Microsoft SQL Server]
'2016-09-29 00:00:00' 附近的语法不正确

更奇怪的是,测试 IBM WebSphere 运行良好并且不会生成这个奇怪的“TIMESTAMP”前缀,而生产集成总线是测试集成总线虚拟机的完整克隆。

测试和生产远程数据库的 SQL Server 版本及其兼容性级别相同(SQL Server 2008 R2;80)。

异常详情

目录 = 'BIPmsgs'
数字 = 2322
文本 = 子 SQL 异常
文件 = '/build/S1000_slot1/S1000_P/src/DataFlowEngine/MessageServices/ImbOdbc.cpp'
线 = 3776
函数 = 'ImbOdbcStatement::checkRcInner'

SQL 状态 = HY000
本机错误代码 = 102
错误文本 = [IBM][ODBC SQL Server Wire Protocol driver][Microsoft SQL Server]'2016-09-29 00:00:00' 附近的语法不正确。

【问题讨论】:

  • 你能澄清哪个数据库有问题吗?
  • @TimBiegeleisen 测试和生产服务器都是 SQL Server 2008 R2。

标签: sql-server exception odbc ibm-integration-bus extended-sql


【解决方案1】:

我使用了明显的解决方法 - 我自己将 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;

它产生了一个正确的查询,但没有解决问题,也没有解释为什么它在测试中有效,但在生产中无效。
这个问题是开放的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 2019-04-13
    • 2013-12-16
    • 1970-01-01
    • 2018-08-14
    • 2011-03-11
    • 2014-02-16
    • 2017-01-11
    相关资源
    最近更新 更多