Ibland behöver du göra lite extra arbete när du integrerar två olika DBMS-program. Här är en lösning som vi använde för att hjälpa en kund som hade problem när han försökte integrera SQL Server med MySQL.
Kunden fick följande fel i SQL Server när han arbetade med en MySQL TIMESTAMP-kolumn.
select * from openquery(MYSQL, 'select lastupdated from carriers') Error converting data type DBTYPE_DBTIMESTAMP to datetime2.
Den bakomliggande orsaken till detta var att i kundens MySQL-databas konverterades ogiltiga DATUM-, DATUMTIME- eller TIMESTAMP-värden automatiskt till nollor (dvs '0000-00-00' eller '0000-00-00 00:00:00') . En noll månad eller dag är inte en giltig datum- eller tidskombination i SQL Server. För att komma runt detta konverterade vi först kolumnen som kommer tillbaka från MySQL till en char(20):
select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as lastupdated from carriers')
Kolumnens värde '0000-00-0000:00:00' konverterades sedan till 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')
Slutligen, för att få tillbaka kolumnen "lastupdated" till en datetime2, körde vi:
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