如何使用INSERT INTO OPENQUERY SELECT从mssql将日期时间插入到mysql中

时间:2017-08-11 17:13:57

标签: mysql sql sql-server datetime timestamp

我以前使用以下格式插入我的mysql数据库,并希望保持统一。

INSERT INTO     OPENQUERY (ENET, 'SELECT * FROM ActiveDirectory.Computers')  -- MYSQL database
SELECT          c.[CommonName],
                c.[DistinguishedName],
                c.[SAMAccountName],
                c.[DNSHostName],
                c.[Location],
                c.[Division],
                c.[Department],
                c.[ManagedBy],
                c.[MachineRole],
                CAST(CAST(c.[LastLogon] as timestamp) as datetime) AS LastLogon,
                c.[OperatingSystem],
                c.[OperatingSystemVersion],
                c.[ServicePack],
                c.[OU],
                c.[CreatedOn],
                c.[ChangedOn],
                CASE WHEN c.[UserAccountControl] & 2 = 0 THEN 1 ELSE 0 END AS [Enabled]     -- Check to see if disabled.  Disabled = bitwise of 2;  4098 = 4096 + 2 = Trust Account + Disabled
FROM            [IT_ActiveDirectory].[dbo].[ADComputerTable] c -- MSSQL database

在将MSSQL(c.LastLogon, c.CreatedOn, c.ChangedOn)中的日期时间字段插入到也是日期时间的mysql字段时出现问题。我几乎尝试了CAST()CONVERT()的所有组合,但我可能错过了一些东西。我也尝试将mysql的字段类型更改为时间戳。

返回:Conversion failed when converting date and/or time from character string.

对我来说,MSSQL不仅会将数据发送到MYSQL并让它进行转换,这似乎很奇怪。相反,在将数据类型和数据发送到MYSQL之前,它似乎正在尝试转换和匹配数据类型和数据。

如果我不能以这种方式插入它,我会接受另一种格式,比如它是否可以在OPENQUERY() SELECT内插入。有什么建议?我此刻已经死在水中了。

1 个答案:

答案 0 :(得分:0)

我会尝试转换为ISO-8601格式字符串:

INSERT INTO OPENQUERY (ENET, 'SELECT * FROM ActiveDirectory.Computers')
SELECT
    ...,
    CONVERT(VARCHAR, LastLogon, 126) AS LastLogon

FROM [IT_ActiveDirectory].[dbo].[ADComputerTable];

我也不喜欢SELECT *中的OPENQUERY。如果列按位置匹配,则容易出错。考虑将开始扩展到列。

相关问题