Đôi khi bạn cần phải thực hiện thêm một chút công việc khi tích hợp hai chương trình DBMS khác nhau. Đây là một giải pháp mà chúng tôi đã sử dụng để trợ giúp một khách hàng đang gặp sự cố khi cố gắng tích hợp SQL Server với MySQL.
Khách hàng gặp lỗi sau trong SQL Server khi làm việc với cột TIMESTAMP của MySQL.
select * from openquery(MYSQL, 'select lastupdated from carriers') Error converting data type DBTYPE_DBTIMESTAMP to datetime2.
Lý do cơ bản cho điều này là trong cơ sở dữ liệu MySQL của khách hàng, các giá trị DATE, DATETIME hoặc TIMESTAMP không hợp lệ đã được tự động chuyển đổi thành số không (tức là '0000-00-00' hoặc '0000-00-00 00:00:00') . Tháng hoặc ngày bằng 0 không phải là kết hợp ngày hoặc giờ hợp lệ trong SQL Server. Để giải quyết vấn đề này, trước tiên chúng tôi chuyển đổi cột quay trở lại từ MySQL thành char (20):
select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as lastupdated from carriers')
Giá trị của cột '0000-00-0000:00:00' sau đó được chuyển đổi thành 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')
Cuối cùng, để đưa cột "cập nhật lần cuối" trở lại datetime2, chúng tôi đã chạy:
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