2015-06-23 38 views
0

最近我們升級了我們的一個應用程序,並且作爲升級的一部分,數據庫也從SQL Server 2005升級到了2008年。我們使用WMB 7.0來處理用於應用程序的傳入消息。無法將時間戳值從WebSphere Message Broker寫入SQL Server 2012數據庫

代理在收到消息後,會使用消息流中由CURRENT_TIMESTAMP方法返回的值更新db中的列(datetime)。

UPDATE Database.DATABASENAME 
SET MODIFIEDDATE = CURRENT_TIMESTAMP 

這是工作的罰款,直到我們使用SQL Server 2005,但SQL Server 2012中,我們得到這個錯誤在經紀人日誌:

[IBM] [ODBC SQL Server驅動程序] [SQL服務器]從角色轉換日期和/或時間時轉換失敗。

odbc.ini文件中我們使用此配置:

Driver=/opt/mqsi/ODBC/V6.0/lib/UKmsss24.so 
Description=DataDirect 6.0 SQL Server Wire Protocol 
Address= ADDRESSOFDB 
Database= DATABASENAEM 
AnsiNPW=Yes 
QEWSD=40117 
QuotedId=No 
ReportDateTimeType=0 

我也試圖寫入數據庫之前投時間戳:

DECLARE timestampChar CHARACTER; 
SET timestampChar = CAST (CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyy-MM-dd HH:mm:ss.SSS'); 

UPDATE Database.DATABASENAME 
SET MODIFIEDDATE = CAST(timestampChar AS TIMESTAMP FORMAT 'yyyy-MM-dd HH:mm:ss.SSS') 

我也試過中繼:

PASSTHRU ('UPDATE Database.TRANSACTIONINSTALLMENT AS TI 
SET UUID =?, 
MODIFIEDDATE =?, 
WHERE TI.TRANSACTIONID =? AND 
TI.INVOLVEMENTNUMBER =? AND 
TI.INSTALLMENTNUMBER =?', 
techaccount.UUId, 
currentTimestampChar, 
cTransactionId, 
techaccount.Reinsurer_Involvement_Number, 
techaccount.Reinsurer_Involvement_Number, 
techaccount.TechAccountAmtItem.InstalmentNbr); 

但是t他也導致同樣的錯誤。請幫助任何人。

回答

0

WMBv7不支持SQL Server 2012:請參閱此link。 WMB的更高版本可以。

此外,在SQL Server 2005之後的版本中,引入了可能需要考慮的datetime替代方法。

+0

謝謝回答,但我能夠連接,並從WMBv7一個SQL Server 2012的DB寫入。 – HyperioN

0

你可以嘗試使用運行像PASSTHRU更新:

PASSTHRU( 'UPDATE DATABASENAME SET MODIFIEDDATE = ''' || CAST(CURRENT_TIMESTAMP AS字符格式「YYYY-MM-DD HH:MM:SS.SSS ')|| '''')

爲什麼你在你的ODBC.INI我QEWSD就一起來看看: http://www-01.ibm.com/support/docview.wss?uid=swg21488008

+0

更新數據庫。TRANSACTION INSTALLMENT AS TI SET UUID = techaccount.UUId,MODIFIEDDATE = CURRENT_TIMESTAMP WHERE TI.TRANSACTIONID = cTransactionId AND TI.INVOLVEMENTNUMBER = cInvolvementNumber – HyperioN

+0

您能否幫助我用passthru構建上述語句。也作爲passthru是一個函數,我必須返回一個值,如果是的話,那麼在哪裏? – HyperioN

+0

這次我使用passthru,但是我得到:[IBM] [ODBC SQL Server Driver] 20136。我已經在上面的問題中更新了現在與passthru一起使用的查詢。請讓我知道如果它是錯誤的。 – HyperioN

0

得到它終於解決了。詳細信息如下:

問題:代理無法在新的SQL Server 2012 db中編寫時間戳記值。

原因:
1.代理以datetime數據類型發送時間戳。 2.代理以YYYY-MM-DD HH:MM:SS.ssssss格式發送時間戳; SQL Server 2012中不支持datetime數據類型。

修復:將時間戳記轉換爲字符串並將其格式更改爲YYYY-MM-DD HH:MM:SS.sss。

鑄造和格式:

DECLARE timestampChar CHARACTER; 
SET timestampChar = CAST (CURRENT_TIMESTAMP AS CHARACTER FORMAT 'yyyy-MM-dd HH:mm:ss.SSS'); 

UPDATE Database.DATABASENAME 
SET MODIFIEDDATE = timestampChar; 
相關問題