首页 > 解决方案 > 动态创建表并将数据从 MySQL 复制到 SQL Server 数据库

问题描述

我可以通过检查 MySQl 表中的列在 SQL Server 中手动创建一个表。然后能够将数据从 MySQL 移动到 SQL Server 表。

示例: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 Server 中创建同一个表

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 Server:

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

但是,我的 mySQL_db.Employee 表每天都会获得更多或更少的列。所以每天我需要在上述查询中手动映射这些列来重做任务。这个任务有什么动态的方法吗?

我有大约 40 张桌子,每张桌子大约有 30 多列。所以寻找任何一种动态的方式。

标签: mysqlsql-serverdynamic-tables

解决方案


您可以SELECT * INTO将数据加载到表中。更多关于选择

我假设您适合DROP&RECREATE和加载数据的简单场景。您可能无法获得正确的数据类型,因为 SQL Server 根据初始行集自动确定数据类型。

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

源表中定义的索引、约束和触发器不会转移到新表中,也不能在 SELECT...INTO 语句中指定。如果需要这些对象,您可以在执行 SELECT...INTO 语句后创建它们。


推荐阅读