Динамическое создание таблиц и копирование данных из MySQL в SQL базу данных сервера - PullRequest
0 голосов
/ 02 марта 2020

Я могу создать таблицу вручную на сервере SQL, проверяя столбцы из таблицы MySQl. И затем возможность перемещать данные из MySQL в SQL серверную таблицу.

Пример: MySQL таблица = Сотрудник

Describe Employee;

Вывод

Field,   Type,       Null,  Key, Default, Extra
EmpId   int(10)       NO     PRI    0
Name    varchar(100)  YES       
Age     int(10) YES                 18
EmailId  varchar(100) NO

Используя это, я создаю ту же таблицу на SQL Сервере

Drop table MsSQLdb..Employee;
CREATE TABLE Employee (
    EmpId int NOT NULL PRIMARY KEY DEFAULT 0,
    Name varchar(100),
    Age int de,
    Name varchar(100)  NOT NULL DEFAULT  18
);

Теперь используя OpenQuery для копирования данных с MySQL на SQL Сервер:

select EmpId,Name,Age,EmailId into MsSQLdb..Employee
from
OPENQUERY(LinkedServer, 'SELECT EmpId,Name,Age,EmailId  FROM mySQL_db.Employee')

Но ежедневно моя таблица mySQL_db.Employee получает больше столбцов или меньше. Поэтому ежедневно мне нужно вручную сопоставлять эти столбцы в вышеупомянутых запросах, чтобы повторить задачу. Есть ли какой-нибудь динамический c способ для этой задачи?

У меня около 40 таблиц, и у каждой таблицы около 30+ столбцов. поэтому ищу какой-нибудь динамический c способ.

1 Ответ

0 голосов
/ 02 марта 2020

Вы можете go для SELECT * INTO для загрузки данных в таблицы. Подробнее о SELECT

Я полагаю, что вам подойдет DROP & RECREATE и простой сценарий загрузки данных. Вы можете не получить правильный тип данных, так как SQL Сервер автоматически определяет тип данных на основе начального набора строк.

DROP TABLE dbo.Employee;
SELECT * INTO dbo.Employee 
from
OPENQUERY(LinkedServer, 'SELECT * FROM mySQL_db.Employee')

Индексы, ограничения и триггеры, определенные в исходной таблице, не переносятся в новую таблицу и не могут указываться в операторе SELECT ... INTO. Если эти объекты требуются, вы можете создать их после выполнения оператора SELECT ... INTO.

...