0

ESQLの計算ノードには、以下の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; 

DateFromDateToxsd:dateTimeとしてXSDに記載されており、そのため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"プレ生産統合バスはテスト統合バス仮想マシンの完全なクローンですが、修正します。

testとproductionリモートデータベースの両方のSQL Serverバージョンとその互換性レベルは同じです(SQL Server 2008 R2; 80)。

例外の詳細

カタログ= 'BIPmsgs'
番号= 2322
テキスト=子供SQL例外
ファイル=「/ビルド/ S1000_slot1/S1000_P/SRC/DataFlowEngine/MessageServices/ImbOdbc.cpp」
ライン= 3776
機能= 'ImbOdbcStatement :: checkRcInner'

SQL State = 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; 

それは正しいクエリを生成するが、問題を解決しないとなぜテストで動作するのか説明しませんが、実際には動作しません。
質問は開いています。

関連する問題