无法向已链接MySQL服务器插入数据,咨询跨库数据同步方法
从SQL Server向MySQL插入/复制数据的解决方案
先解决插入报错问题
你触发的Msg 117错误是因为链接服务器的引用格式不符合规范,SQL Server仅允许最多3个前缀(即四部分命名:[服务器].[数据库].[架构].[表]),以下是两种正确的插入单条数据的方法:
方法1:修正四部分命名的INSERT语句
使用标准的链接服务器引用格式,替换原来的...为.,MySQL的架构默认用dbo即可:
INSERT INTO [MYSQL].[cclog_db].[dbo].[companies] (id, company_code, name) VALUES (5, 5 , 'Random Company');
方法2:使用OPENQUERY/EXECUTE AT语法(兼容性更强)
如果四部分命名仍有问题,可直接把SQL语句发送到MySQL服务器执行:
-- 用OPENQUERY插入 INSERT OPENQUERY([MYSQL], 'SELECT id, company_code, name FROM cclog_db.companies') VALUES (5, 5, 'Random Company'); -- 或者用EXECUTE AT直接执行MySQL语法 EXECUTE ('INSERT INTO cclog_db.companies (id, company_code, name) VALUES (5, 5, ''Random Company'')') AT [MYSQL];
将SQL Server同表数据复制到MySQL的方法
根据数据量和需求,有以下几种常用方案:
方案1:INSERT...SELECT直接同步
如果本地SQL Server和远程MySQL的表结构匹配,直接用SELECT拉取本地数据插入远程表:
INSERT INTO [MYSQL].[cclog_db].[dbo].[companies] (id, company_code, name) SELECT id, company_code, name FROM [你的本地SQL Server数据库].[dbo].[companies];
注意:需确保两边字段类型、长度一致,若存在重复主键,需先清理目标表重复数据或调整插入逻辑。
方案2:结合OPENQUERY同步
通过OPENQUERY传递查询逻辑,适合复杂数据筛选场景:
INSERT OPENQUERY([MYSQL], 'SELECT id, company_code, name FROM cclog_db.companies') SELECT id, company_code, name FROM [你的本地SQL Server数据库].[dbo].[companies];
方案3:用SSIS高效同步(适合大量数据/定期同步)
如果需要处理大量数据或定期同步任务,SQL Server Integration Services(SSIS)是更高效的选择:
- 打开SQL Server Data Tools(SSDT),新建Integration Services项目
- 添加「OLE DB源」组件,配置连接到你的SQL Server数据库并选择源表
- 添加「MySQL目标」组件,配置连接到MySQL数据库并选择目标表
- 完成源与目标的字段映射,运行包即可完成数据复制
内容的提问来源于stack exchange,提问作者Signor
相关产品推荐
相关产品推荐

