如何在SQL Server中跨不同数据库将数据从一张表复制到另一张空表
SQL Server跨数据库同结构表数据复制方案
适用前提
两张表结构完全一致,所在数据库属于同一个SQL Server实例,你使用的数据库账号对源表有查询权限、对目标表有写入权限。
操作步骤
场景1:目标表无自增(IDENTITY)主键
直接使用INSERT INTO ... SELECT语法即可,注意:纯数字开头的表名需要用方括号[]包裹,避免SQL语法解析错误:
-- 切换到目标表所在的数据库 USE [你的2018表所在的数据库名] GO INSERT INTO dbo.[2018] SELECT * FROM [你的2012表所在的数据库名].dbo.[2012] GO
场景2:目标表有自增(IDENTITY)主键
需要先开启IDENTITY_INSERT权限,允许手动写入自增列的值,插入完成后关闭权限即可,注意必须显式列出所有列名,不能直接用*:
-- 切换到目标表所在的数据库 USE [你的2018表所在的数据库名] GO -- 开启自增列写入权限 SET IDENTITY_INSERT dbo.[2018] ON GO INSERT INTO dbo.[2018] (列1, 列2, 列3, ...) -- 替换为实际的所有列名,顺序和源表一致 SELECT 列1, 列2, 列3, ... FROM [你的2012表所在的数据库名].dbo.[2012] GO -- 关闭自增列写入权限 SET IDENTITY_INSERT dbo.[2018] OFF GO
注意事项
- 正式执行全量插入前,建议先测试少量数据验证格式符合预期,避免产生脏数据:
-- 仅插入前10条测试 INSERT TOP(10) INTO dbo.[2018] SELECT * FROM [你的2012表所在的数据库名].dbo.[2012]
- 若表存在外键、唯一约束、触发器等,建议先临时禁用,插入完成后再重新启用,避免插入中途报错
- 数据量超过10万条的场景建议分批插入,避免事务日志占用过多磁盘空间
- 若两张表所在的数据库属于不同的SQL Server实例,需要先配置「链接服务器」打通实例访问,再按照
[链接服务器名].库名.架构名.表名的格式引用源表即可
内容的提问来源于stack exchange,提问作者Kyodi
相关产品推荐
相关产品推荐

