Sql server 2012 无法将时间戳值从WebSphere Message Broker写入SQL Server 2012数据库

Sql server 2012 无法将时间戳值从WebSphere Message Broker写入SQL Server 2012数据库,sql-server-2012,ibm-mq,messagebroker,Sql Server 2012,Ibm Mq,Messagebroker,最近,我们升级了一个应用程序,作为升级的一部分,数据库也从SQLServer2005升级到2008。我们使用WMB 7.0来处理用于应用程序的传入消息 收到消息后,代理使用messageflow中的CURRENT\u TIMESTAMP方法返回的值更新db中的一列(datetime) UPDATE Database.DATABASENAME SET MODIFIEDDATE = CURRENT_TIMESTAMP 在我们使用SQL Server 2005之前,这一切都很正常,但在SQL Ser

最近,我们升级了一个应用程序,作为升级的一部分,数据库也从SQLServer2005升级到2008。我们使用WMB 7.0来处理用于应用程序的传入消息

收到消息后,代理使用messageflow中的
CURRENT\u TIMESTAMP
方法返回的值更新db中的一列(
datetime

UPDATE Database.DATABASENAME
SET MODIFIEDDATE = CURRENT_TIMESTAMP
在我们使用SQL Server 2005之前,这一切都很正常,但在SQL Server 2012中,我们在代理日志中发现了以下错误:

从字符转换日期和/或时间时,[IBM][ODBC SQL Server驱动程序][SQL Server]转换失败

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
我还尝试在写入db之前强制转换时间戳:

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:

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);

但这也会导致同样的错误。请帮助任何人。

WMBv7不支持SQL Server 2012:请查看此信息。WMB的更高版本确实如此


另外,SQLServer版本比2005晚,介绍了DeaTimes的替代方案,您可能需要考虑。

可以尝试使用PASSURU运行更新:

PASSTHRU('updatedatabasename SET MODIFIEDDATE=''| | CAST(当前时间戳为字符格式'yyyy-MM-dd HH:MM:ss.SSS')| |''))

我想看看为什么在odbc.ini中有QEWSD:
终于解决了。详情如下:

问题:代理无法在新的SQL Server 2012数据库中写入时间戳值

原因:
1.代理将时间戳作为datetime数据类型发送。 2.代理以YYYY-MM-DD HH:MM:SS.SSSS格式发送时间戳;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;

将Database.TransactionInstallation更新为TI SET UUID=techaccount.UUID,MODIFIEDDATE=CURRENT\u时间戳,其中TI.TRANSACTIONID=cTransactionId和TI.INVOLVEMENTNUMBER=CinVolvementNumber您可以帮助我用passthru构造上述语句吗。此外,由于passthru是一个函数,我是否必须返回一个值,如果是,那么返回到哪里?我这次使用了passthru,但得到的结果是:[IBM][ODBC SQL Server Driver]20136。我已经在上面的问题中用passthru更新了我现在使用的查询。如果有错误,请告诉我。好的,我有一些突破,我已尝试将日期直接插入字符串更新数据库。DATABASENAME SET MODIFIEDDATE='2015-06-24 07:50:55.000'并且该值在数据库中得到更新。所以有一件事很清楚,代理与db的连接没有问题。现在,我必须找到一种将当前_DATETIME转换为字符串的方法。感谢您的回答,但我能够从WMBv7连接并写入SQL Server 2012数据库。