我的数据库名称为“EmpOld
”,表名为“Employee
”,数据库名称为“EmpNew
”,表名为“Employee
”。< / p>
除了表中的名称外,两个数据库表的表结构都是相同的。
以下是表格的定义:
数据库“EmpOld
”表名“Employee
”具有以下字段名称:
int e_id
char(20) e_fname
char(25) e_lname
数据库“EmpNew
”表“Employee
”具有以下字段名称:
int id
char(20) fname
char(25) lname
注意,表中唯一的区别是从EmpNew Employee表中删除了字段名称的“e_
”前缀。
如何将数据从EmpOld
数据库移动到EmpNew
数据库?
是否有代码分别映射这些字段。
感谢社区,
尼克
答案 0 :(得分:3)
好吧,你可以手动命名:
INSERT dbo.EmpNew(fname, lname) SELECT e_fname, e_lname FROM dbo.EmpOld;
如果你想在不手动输入列名的情况下这样做,SSMS中就有魔力 - 只需将每个表中的Columns
文件夹拖到查询窗口中的相应位置(然后手动删除标识列) ,时间戳,计算列等(如果相关)。
答案 1 :(得分:1)
除非使用某些代码,否则没有自动映射字段的方法。
这可以通过两种方式完成:
使用SQL Import&amp;导出向导
这是执行此操作的最简单方法,并here is an article逐步执行此操作。关键是在导入数据时更改源字段和目标字段之间的映射。
编写SQL
此方法要求可以访问这两个数据库。使用如下的简单插入语句可以实现
insert into EmpNew.dbo.Employee(id, fname, lname)
select
e_id, e_fname, e_lname
from
EmpOld.dbo.Employee
如果它们在同一个sql server上,那么上面的内容将会正常工作。如果它们是不同的sql server,则可能必须添加链接服务器连接并使用该命令作为前缀。
答案 2 :(得分:0)
是否有代码分别映射这些字段。
不 - 您需要提供映射。如果您正在使用像SSIS这样的ETL工具,那么可能可以基于某些条件以编程方式映射列,但SQL中没有任何内容。
答案 3 :(得分:0)
也许您可以在表sys.columns和其他系统表的帮助下生成代码,以便您可以自动运行复制过程。
我认为你不能使用:
insert into (...) (...)
因为你有两个数据库。所以只需生成如下的插入语句:
insert into table (...) VALUES (...)
如果我误解了这个问题,请纠正我。
答案 4 :(得分:0)
如果没有数据丢失,有两种方法可以做。 1)您可以使用Insert语句
`
Insert into EmpNew (ID,fname,lname)
Select e_id, e_fname, e_lastname
from EmpOld
`
2)您可以简单地使用Import-Export向导 转到“开始”菜单&gt; SQL Server 2008 / 2008R2 / 2012&gt; ImportandExport&GT; 这将带您进入向导框
你很高兴