Перенос из MySql в MsSql

1. LadyInGreen 07.04.22 08:32 Сейчас в теме
Здравствуйте!
Требуется перенос баз из MySql в MsSql. Знаю, что есть помощник по миграции, но он вроде не подойдет (пока не особо четко поставили задачу, но знаю, что по расписанию придется переносить некоторые данные, обновлять их - базы msSql базами MySql).
Я сделала в MsSql link - базы подтянулись из ms sql - то есть их видно, sel ect нормально получается:
sel ect * fr om OPENQUERY (test, 'SEL ECT * FR OM site.b_admin')
Но синтаксис ins ert через openquery мне непонятен :( Вот нашла в форумах формат:
1) INS ERT INTO OPENQUERY (MYSQL, 'SEL ECT * FR OM MySQL_Table')
SEL ECT * FR OM dbo.SQLServer_Table
2) INS ERT IN TO OPENQUERY (MYSQL, 'SELECT * FR OM MySQL_Table')
VALUES ('Value1', 'Val ue2', ...)
В примере №1 непонятно, данные из MySql_table вставляются в dbo.SqlServer ? но почему тогда 2 раза sele ct? в общем, попробовала, не получилось.
В №2 вставляются конкретные значения, написанные в апострофах? А куда вставляются, в текущую базу? В общем, второй пример вообще непонятный.

Может, кто-то сталкивался с переносом таким?
По теме из базы знаний
Найденные решения
13. starik-2005 2899 07.04.22 13:15 Сейчас в теме
(12)
Вот попробовала
ИНСЕРТ ИНТУ Таблица
СЕЛЕКТ * ФРОМ ОПЕНКУЭРИ(блаблабла)
ГО 
18. user1203706 12 07.04.22 14:37 Сейчас в теме
ins ert into changeTest sel ect * from openqery(rest_bitrix3,'sele ct digit,cast(Slovo as char(30)) as slovo fr om  siteadmin.bla-bla-bla')
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 67 07.04.22 08:56 Сейчас в теме
(1)ээээ....если я правильно понимаю задачу, то миграция между СУБД возможна через выгрузку/загрузку в/из *.dt стандартной функциональнстью конфигуратора 1С.

или речь не про базы 1С?
4. LadyInGreen 07.04.22 09:57 Сейчас в теме
(2) Не про базы 1с тема, но это неважно, так как dt все равно бы не получилось - базы 1с у нас слишком большие, не зальется в них dt :)
5. nomad_irk 67 07.04.22 09:59 Сейчас в теме
(4)чей-то не зальется, если они клиент-серверные? выгрузится может любой объем, а вот загрузится в файловый вариант -
не больше определенного
9. LadyInGreen 07.04.22 11:48 Сейчас в теме
(3) Да, спасибо, это тоже вчера читала :)
Но не пойму: запрос в этой ссылке такой:
INSERT OPENQUERY (OracleSvr, 'SEL ECT name FR OM joe.titles')
VALUES ('NewTitle');

Это перенос из оракл в mssql, вроде? то есть мы из базы joe.titles вставляем куда? NewTitle - это что, значение? а где тут база-приемник?

Допустим, мне надо вставить из базы source - которая на MY sql, базу receiver - которая на MS sql. Как тогда запрос написать? (вернее, наверное, не базами, а таблицами передавать надо).
10. LadyInGreen 07.04.22 11:49 Сейчас в теме
(5) Ну так я и пишу - не зальется :) то есть не загрузится.
3. user1203706 12 07.04.22 08:59 Сейчас в теме
(1) ты же прилинковала сервер, пиши обычный ins ert into sele ct
на счет опенквери почитай в BOL
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/openquery-transact-sql?view=sql-server-ver15
6. user1203706 12 07.04.22 10:01 Сейчас в теме
(2) 1с пока еще не умеет хранить базы в MySql
7. nomad_irk 67 07.04.22 10:04 Сейчас в теме
(6)это да, согласен, но вдруг какими чудесными путями смогли :)
8. starik-2005 2899 07.04.22 11:30 Сейчас в теме
(7) 1С умеет работать с любой СУБД, как с внешним источником (отдельный объект дерева метаданных конфигурации, для которого прописывается строка соединения и выбираются нужные таблицы, которые становятся доступны в 1С). Но нельзя работать с конфигурацией 1С в MySQL, т.к. нет возможности разместить эту конфигурацию там.

А по поводу инсерта, то нужно, видимо, что-то типа "Инсерт инту имя_таблицы_здесь фром опенкуэри(блаблабла)".
12. LadyInGreen 07.04.22 13:00 Сейчас в теме
(8) Про инсерт: я тоже так думала, но в примерах, которые я привела, и на сайте, которые советуют в (3) синтаксис другой, непонятный совсем, и не похож на вставку в MsSql :)
Вот попробовала, как Вы советуете, да и вчера вроде как-то похоже пробовала. Ошибку выдает - во вложении.
Прикрепленные файлы:
13. starik-2005 2899 07.04.22 13:15 Сейчас в теме
(12)
Вот попробовала
ИНСЕРТ ИНТУ Таблица
СЕЛЕКТ * ФРОМ ОПЕНКУЭРИ(блаблабла)
ГО 
14. LadyInGreen 07.04.22 14:23 Сейчас в теме
(13) Опять не угадали :) Вкладываю картинки. Хотя, может, ошибка связана с тем, что типы данных разные? Сейчас запрошу у специалиста по Mysql структуру. Просто значения мне показались похожими по типу на те, что в Ms. Я только значения вижу.

Я еще раз внимательно примеры в форумах посмотрела, и мне кажется, что MsSql при работе со связанными серверами может делать вставку только на стороне My Sql (связанного сервера) :( вот, допустим, из этого примера мне так кажется, очень похоже, что вставка идет именно в MY SQL таблицу. Тут же вообще нет упоминания Mssql таблиц?
INS ERT IN TO OPENQUERY (MYSQL, 'SEL ECT * FR OM MySQL_Table')
VALUES ('Val ue1', 'Val ue2', ...)
Прикрепленные файлы:
15. starik-2005 2899 07.04.22 14:24 Сейчас в теме
(14)
Вкладываю картинки.
Ну вот. Осталось добиться, чтобы количество столбцов в источнике и приемнике было одинаковым, а типы - их можно кастануть. Ну и названия столбцов должны соответствовать (на сколько я знаю, но это алиасами можно решить).
20. LadyInGreen 08.04.22 13:06 Сейчас в теме
(15) Спасибо, получилось! Удалось "достать" структуру базы Ms Sql и все пошло хорошо!

ins ert into test.dbo.test sele ct * from OPENQUERY (test_bitrix3, 'SEL ECT Contact_ID, Contact_NAME FR OM TO_CASCANA.EXPORT_DATA')

То есть в базу Ms Sql переношу 2 столбца только.
Совпадения названия столбцов не требуется. В тестовой базе, которую создала в Ms - вообще по-другому назвала.

Кстати, если длина строки в Ms меньше, чем нужно под данные в My - просто пишет что-то типа: "Извините, строка такая то не влезет, переносить не буду".
23. starik-2005 2899 08.04.22 13:52 Сейчас в теме
(20)
Удалось "достать"
Суровое челябинское программирование...
22. LadyInGreen 08.04.22 13:10 Сейчас в теме
16. user1203706 12 07.04.22 14:24 Сейчас в теме
(14) Если типы не совпадают, делай cast в запросе к мускулу
17. user1203706 12 07.04.22 14:25 Сейчас в теме
Для начала, можешь в запросе указать не * ,а конкретные колонки и их привести к одинаковому типу.
18. user1203706 12 07.04.22 14:37 Сейчас в теме
ins ert into changeTest sel ect * from openqery(rest_bitrix3,'sele ct digit,cast(Slovo as char(30)) as slovo fr om  siteadmin.bla-bla-bla')
21. LadyInGreen 08.04.22 13:09 Сейчас в теме
(18)
cast(Slovo as char(30))


Спасибо, cast попробовала, работает - например, преобразовывает тип text в varchar:

ins ert into test.dbo.test2 sele ct * from OPENQUERY (test_bitrix3, 'SEL ECT Contact_datA_ID, cast(Object_ADDRESS as char(60)) FR OM TO_CASCANA.EXPORT_DATA').

При этом, если строка не влазит, то не ругается (как я написала в пункте 20), все равно переносит, но строку обрезает.
24. user1203706 12 08.04.22 13:56 Сейчас в теме
(21) дык надо кастовать к типу поля в приёмнике, а не наугад..
19. user1203706 12 07.04.22 14:38 Сейчас в теме
Чето через жпо тут вставка кода..накой-то хрен пробелы вставляет, ну да ладно, смысл понятен, надеюсь.
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день