2つの異なるDBMSプログラムを統合する場合、少し余分な作業が必要になることがあります。これは、SQLServerをMySQLと統合しようとしたときに問題が発生したお客様を支援するために使用した回避策です。
MySQL TIMESTAMP列を操作しているときに、SQLServerで次のエラーが発生していました。
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」) 。ゼロの月または日は、SQLServerでは有効な日付または時刻の組み合わせではありません。これを回避するために、最初に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