2016-09-29 60 views
0

ESQL計算節點不正確的語法:ESQL產生接近包含以下ESQL查詢的生產的IBM WebSphere集成總線時間戳

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服務器Wire Protocol驅動程序] [微軟SQL服務器]
附近有語法錯誤'2016-09-29 00:00:00'

更奇怪的是,測試IBM WebSphere工作良好,並且不會生成這個奇怪的「TIMESTAMP」pre修復,而生產集成總線是測試集成總線虛擬機的完整克隆。

測試和生產遠程數據庫的SQL Server版本及其兼容級別相同(SQL Server 2008 R2; 80)。

異常詳細

目錄= 'BIPmsgs'
數= 2322
文本=兒童SQL異常
文件=「/編譯/ S1000_slot1/S1000_P/src目錄/ DataFlowEngine/MessageServices/ImbOdbc.cpp」
線= 3776
功能= 'ImbOdbcStatement :: checkRcInner'

SQL狀態= HY000
本機錯誤代碼= 102
錯誤文本= [IBM] [ODBC SQL Server連接協議驅動程序] [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; 

它產生正確的查詢,但沒有解決問題,並不能解釋爲什麼它在測試中起作用,但不能用於生產。
問題是開放的。