Czasami trzeba wykonać trochę dodatkowej pracy podczas integracji dwóch różnych programów DBMS. Oto obejście, którego użyliśmy, aby pomóc klientowi, który miał problemy podczas próby integracji SQL Server z MySQL.
Klient otrzymywał następujący błąd w SQL Server podczas pracy z kolumną MySQL TIMESTAMP.
select * from openquery(MYSQL, 'select lastupdated from carriers') Error converting data type DBTYPE_DBTIMESTAMP to datetime2.
Podstawowym powodem tego było to, że w bazie danych MySQL klienta nieprawidłowe wartości DATE, DATETIME lub TIMESTAMP były automatycznie konwertowane na zera (tj. „0000-00-00” lub „0000-00-00 00:00:00”) . Zerowy miesiąc lub dzień nie jest prawidłową kombinacją daty lub godziny w programie SQL Server. Aby obejść ten problem, najpierw przekonwertowaliśmy kolumnę wracającą z MySQL na char(20):
select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as lastupdated from carriers')
Wartość kolumny „0000-00-0000:00:00” została następnie przekonwertowana na 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')
Na koniec, aby przywrócić kolumnę „lastupdated” z powrotem do daty i godziny2, uruchomiliśmy:
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