【问题标题】:SQL Incorrect Datetime value for CURRENT_TIMESTAMP.....SometimesCURRENT_TIMESTAMP 的 SQL 日期时间值不正确.....有时
【发布时间】:2025-12-06 23:05:01
【问题描述】:

我正在通过 MSSQL Server 上的链接服务器从不同机器上的 MYSQL 数据库收集数据。一旦数据被收集并保存在主服务器上的表中,我需要使用时间戳更新 MYSQL 表,以显示该记录何时传输。我使用的代码如下;

UPDATE openquery("server_name", 'SELECT * from tbl_transferinfo') 
SET TransferDate = CURRENT_TIMESTAMP, MessageLog = 'Transfer Successful';

TransferDate 设置为“日期时间”。 问题是这有时运行良好,但有时我得到以下错误;

链接服务器“server_name”的 OLE DB 提供程序“MSDASQL”返回消息“[MySQL][ODBC 8.0(w) Driver][mysqld-5.5.29]Incorrect datetime value: '2020-07-20 13:11:第 1 行的“TransferDate”列的 26.1133333'。 消息 7343,第 16 层,状态 4,第 1 行 链接服务器“server_name”的 OLE DB 提供程序“MSDASQL”无法更新表“[MSDASQL]”。

关于为什么这种情况经常发生的任何想法?

提前谢谢你

【问题讨论】:

  • 您在显示此问题的服务器上使用的帐户是否具有更新权限?
  • 我相信我应该有。它有时会正确更新表格。老实说,我不确定如何检查。

标签: mysql sql sql-server date sql-update


【解决方案1】:

MySQL datetime 数据类型不接受毫秒。

您可以将 MySQL 数据库中的目标列从datetime 更改为timestamp,或cast() SQL Server 时间戳以删除毫秒,例如:

UPDATE openquery("server_name", 'SELECT * from tbl_transferinfo') 
SET 
    TransferDate = convert(char(19), current_timestamp, 120), 
    MessageLog = 'Transfer Successful';

【讨论】:

  • 感谢您的回复,我刚试了一下,弹出如下错误; ''NOW' 不是可识别的内置函数名。'我正在使用 SSMS,也许那不使用它?我不熟悉各种 SQL 工具
  • 根据 SSMS,current_timestamp 确实返回日期时间
  • @jimbonda:我想我最初误读了你的问题。我改了答案,请看。
  • 更改后,这确实提出了一种更好的方法 - 使用可以使用 NOW() 的传递查询并绕过 sql 方言的混合。
  • 更改已排序。好东西。谢谢