在SSMS中如何基于另一服务器的两张表在目标服务器创建合并表?
在SSMS中跨服务器合并表并创建新表的实现方案
嘿,这个跨服务器合并数据建表的需求其实挺常见的,我给你两种实用的实现方式,你可以根据自己的场景来选:
方法一:使用链接服务器(适合重复同步场景)
如果之后还需要定期从源服务器同步数据到Table3,配置链接服务器是更方便的选择:
1. 先在目标服务器上创建链接服务器
你可以用SSMS图形界面操作,或者直接跑T-SQL命令:
-- 创建链接服务器指向源服务器 EXEC sp_addlinkedserver @server = N'Your_Source_Server_Name', -- 替换成你的源服务器名称 @srvproduct=N'SQL Server'; -- 如果源服务器需要单独的登录验证,添加登录映射 EXEC sp_addlinkedsrvlogin @rmtsrvname = N'Your_Source_Server_Name', @useself = N'False', @locallogin = NULL, @rmtuser = N'Source_Server_Login', -- 替换成源服务器的登录名 @rmtpassword = N'Source_Server_Password'; -- 替换成源服务器的密码
2. 直接创建Table3并插入UNION后的数据
用SELECT INTO语句可以一步完成表创建和数据插入,注意要给Table2的列取别名,和Table1的列名对应:
-- 替换成你的源数据库名、架构名(一般是dbo) SELECT col1, col2, col3 INTO Table3 FROM [Your_Source_Server_Name].[Source_DB_Name].[dbo].[Table1] -- 如果不需要去重,用UNION ALL性能更好 UNION SELECT col4 AS col1, col5 AS col2, col6 AS col3 FROM [Your_Source_Server_Name].[Source_DB_Name].[dbo].[Table2];
方法二:使用导入数据向导(适合一次性操作)
如果只是一次性把数据合并到Table3,用SSMS自带的导入向导更直观:
- 打开SSMS,右键目标数据库 → 任务 → 导入数据,启动导入向导
- 数据源选择SQL Server Native Client,填写源服务器的名称、登录信息,选择源数据库
- 目标选择当前的目标服务器和数据库,点击下一步
- 选择编写查询以指定要传输的数据,点击下一步
- 在查询编辑器里输入合并语句:
SELECT col1, col2, col3 FROM Table1 UNION ALL -- 按需选择UNION/UNION ALL SELECT col4 AS col1, col5 AS col2, col6 AS col3 FROM Table2 - 点击下一步,设置目标表名为
Table3,可以编辑列映射确保数据类型匹配,最后完成向导即可自动创建表并插入数据
关键注意事项
- 确保目标服务器的登录账号有权限访问源服务器的数据库和对应表
- 源表的对应列数据类型必须兼容(比如Table1的col1和Table2的col4要同为int/varchar等),否则UNION会报错
- 如果需要后续同步数据,可以先创建Table3的结构,再用
INSERT INTO Table3 (...) SELECT ... UNION ...定期执行
内容的提问来源于stack exchange,提问作者user3761541
相关产品推荐
相关产品推荐

