Soms moet u wat extra werk doen bij het integreren van twee verschillende DBMS-programma's. Hier is een tijdelijke oplossing die we hebben gebruikt om een klant te helpen die problemen had bij het integreren van SQL Server met MySQL.
De klant kreeg de volgende foutmelding in SQL Server bij het werken met een MySQL TIMESTAMP-kolom.
select * from openquery(MYSQL, 'select lastupdated from carriers') Error converting data type DBTYPE_DBTIMESTAMP to datetime2.
De onderliggende reden hiervoor was dat in de MySQL-database van de klant ongeldige DATE-, DATETIME- of TIMESTAMP-waarden automatisch werden geconverteerd naar nullen (d.w.z. '0000-00-00' of '0000-00-00 00:00:00') . Een maand of dag van nul is geen geldige datum- of tijdcombinatie in SQL Server. Om dit te omzeilen, hebben we eerst de kolom die terugkomt van MySQL geconverteerd naar een char (20):
select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as lastupdated from carriers')
De waarde van de kolom '0000-00-0000:00:00' werd vervolgens geconverteerd naar 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')
Ten slotte, om de kolom "lastupdated" terug te brengen naar een datetime2, hebben we het volgende uitgevoerd:
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