如何使用另一台SQL Server的数据创建表或视图?
结论
该需求完全可实现,你所持有的源库只读权限已经满足所有操作要求,不需要额外申请源库的写入权限。
具体操作方案
方案1:一次性导出导入(适合小数据量、仅需要静态数据快照的场景)
直接用SQL Server Management Studio(SSMS)即可完成操作:
- 打开SSMS同时连接源库(第三方供应商的SQL Server 2012实例)和目标远程服务器的数据库实例
- 在源库中找到你需要迁移的表/视图,右键选择 编写脚本为 → CREATE到 → 新查询窗口,获取对应表的结构创建脚本
- 将脚本在目标库的查询窗口执行,提前创建好空的表结构
- 执行跨实例数据插入,语句示例如下:
INSERT INTO 目标库名.目标Schema名.目标表名 SELECT * FROM 源库服务器注册名.源库名.源Schema名.源表/视图名
如果数据量较大,也可以用SSMS自带的导入导出向导操作:右键目标库 → 任务 → 导入数据,数据源选SQL Server Native Client,填写源库的连接信息,目标选择你要写入的远程数据库,按照向导指引选中需要同步的表/视图后直接执行即可。
方案2:链接服务器+定时同步(适合需要定期更新数据的场景)
如果需要定期拉取源库的最新数据,可以在目标远程SQL Server上配置指向源库的链接服务器,实现自动化同步:
- 用管理员权限登录目标远程SQL Server的SSMS,找到 服务器对象 → 链接服务器 → 右键新建链接服务器
- 链接服务器类型选
SQL Server,填写源库的服务器地址,在安全性页配置你访问源库的只读账号和密码作为连接凭据 - 配置完成后执行测试语句验证连通性:
SELECT TOP 10 * FROM [源库链接服务器名].[源库名].[源Schema名].[源表名]
- 后续可以创建SQL Server代理定时作业,定期执行同步逻辑:如果需要全量覆盖同步,每次同步前先TRUNCATE目标表再插入全量数据;如果需要增量同步,可以基于源表的更新时间字段做增量筛选,示例如下:
-- 增量同步示例,假设源表有记录更新时间的update_time字段 INSERT INTO 目标表名 SELECT * FROM [源库链接服务器名].[源库名].[源Schema名].[源表名] WHERE update_time > 上次同步的最大时间值
注意事项
- 源库为SQL Server 2012版本,和绝大多数高版本SQL Server目标库兼容性良好,基本不会出现字段类型不兼容的问题
- 同步操作尽量选源库业务低峰期执行,避免占用源库过多带宽影响第三方业务运行
- 如果源库有限流、会话超时设置,大数据量同步建议分批拉取,不要一次性查询全表超大数量
- 如果你的目标远程服务器数据库不是SQL Server,也可以使用各类ETL工具(比如Kettle、DataX等)连接源库拉取数据写入目标库,只读权限同样满足要求
内容的提问来源于stack exchange,提问作者Michael Yoo
相关产品推荐
相关产品推荐

