@Pagliaccio
Внедряю CRM

Можно ли связать таблицы MSSQ и MySQL через LinkedServer по guid?

Есть два SQL-сервера: один MSSQL, второй MySQL. Второй подключён к первому как LinkedServer.
Есть необходимость экспорта данных из MSSQL в MySQL с контролем наличия экспортируемых данных на удалённом сервере.
Все запросы через openquery.
В обычном случае проверяем, что в удалённой таблице нет данных через left join и is null
insert into OPENQUERY (MYSQL, 'select
		Id, ...
	FROM mysqltable')
select
		ms.Id, ...
from OPENQUERY (MYSQL, 'select * FROM mysqltable') my
	right join MSSQLTable ms on my.Id = ms.Id
where My.Id is null


Если Id - int, то связь проходит нормально.
Но у нас Id в MSSQL - это guid. А в MySQL свои танцы с хранением UUID в виде binary.

В связи с этим сам вопрос: возможно ли вообще корректно сохранить guid из MSSQL в MySQL через LinkedServer так, чтобы по нему можно было было связать две таблицы с помощью openquery.
  • Вопрос задан
  • 178 просмотров
Решения вопроса 2
@d-stream
Готовые решения - не подаю, но...
А если кастить id в varbinary?
Или наоборот в mysql запросе вместо (или вместе) с * еще и преобразование бинарного uuid в текстоподобное?
Ответ написан
@Pagliaccio Автор вопроса
Внедряю CRM
Решение состоит из нескольких частей:
1. Отказаться от openquery перейдя к синтаксису mysql...mysqltable: Подробнее описание здесь

2. В MySQL поле Id должно быть binary(16), подробнее здесь: Storing UUID Values in MySQL Tables

3. Запрос будет выглядеть следующим образом:
insert into mysql...mysqltable (Id, ...)
select
    ms.Id, ...
from MSSQLTable ms
  left join mysql...mysqltable my on my.Id = ms.Id
where my.Id is null
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы