Понякога трябва да свършите малко допълнителна работа, когато интегрирате две различни програми за СУБД. Ето решение, което използвахме, за да помогнем на клиент, който имаше проблеми при опит да интегрира SQL Server с MySQL.
Клиентът получаваше следната грешка в SQL Server, когато работи с MySQL TIMESTAMP колона.
select * from openquery(MYSQL, 'select lastupdated from carriers') Error converting data type DBTYPE_DBTIMESTAMP to datetime2.
Основната причина за това беше, че в базата данни MySQL на клиента невалидни стойности DATE, DATETIME или TIMESTAMP автоматично се преобразуват в нули (т.е. '0000-00-00' или '0000-00-00 00:00:00') . Нулев месец или ден не е валидна комбинация от дата или час в SQL Server. За да заобиколим това, първо преобразувахме колоната, която се връща от MySQL, в char(20):
select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as lastupdated from carriers')
След това стойността на колоната „0000-00-0000:00:00“ беше преобразувана в 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')
И накрая, за да върнем колоната "lastupdated" обратно към datetime2, изпълнихме:
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