sql >> Base de Datos >  >> RDS >> Mysql

Trabajar con columnas MySQL TIMESTAMP en SQL Server

A veces es necesario hacer un poco de trabajo adicional al integrar dos programas DBMS diferentes. Esta es una solución alternativa que usamos para ayudar a un cliente que tenía problemas al intentar integrar SQL Server con MySQL.

El cliente recibía el siguiente error en SQL Server cuando trabajaba con una columna TIMESTAMP de MySQL.

select * from openquery(MYSQL, 'select lastupdated from carriers')
Error converting data type DBTYPE_DBTIMESTAMP to datetime2.

La razón subyacente de esto fue que en la base de datos MySQL del cliente, los valores DATE, DATETIME o TIMESTAMP no válidos se convirtieron automáticamente a ceros (es decir, '0000-00-00' o '0000-00-00 00:00:00') . Un día o mes cero no es una combinación válida de fecha u hora en SQL Server. Para solucionar esto, primero convertimos la columna que regresa de MySQL a char(20):

select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as
lastupdated from carriers')

El valor de la columna '0000-00-0000:00:00' luego se convirtió a NULL:

select case lastupdated when '0000-00-00 00:00:00' then null else lastupdated
end as lastupdated from openquery(MYSQL, 'select cast(lastupdated as char(20) )
as lastupdated from carriers')

Finalmente, para que la columna "última actualización" regrese a una fecha y hora2, ejecutamos:

select cast(x.lastupdated as datetime2) as lastupdated from ( select case
lastupdated when '0000-00-00 00:00:00' then null else lastupdated end as
lastupdated from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as
lastupdated from carriers limit 100') ) x