如何将Sql表从一个数据库复制到另一个具有不同字段名称的数据库

时间:2014-01-28 15:55:27

标签: sql sql-server

我的数据库名称为“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数据库?

是否有代码分别映射这些字段。

感谢社区,

尼克

5 个答案:

答案 0 :(得分:3)

好吧,你可以手动命名:

INSERT dbo.EmpNew(fname, lname) SELECT e_fname, e_lname FROM dbo.EmpOld;

如果你想在不手动输入列名的情况下这样做,SSMS中就有魔力 - 只需将每个表中的Columns文件夹拖到查询窗口中的相应位置(然后手动删除标识列) ,时间戳,计算列等(如果相关)。

  

enter image description here

     

enter image description here

答案 1 :(得分:1)

除非使用某些代码,否则没有自动映射字段的方法。

这可以通过两种方式完成:

  1. 使用SQL Import&amp;导出向导

    这是执行此操作的最简单方法,并here is an article逐步执行此操作。关键是在导入数据时更改源字段和目标字段之间的映射。

  2. 编写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;    这将带您进入向导框

  • 选择来源: - DataSource(ServerName)和数据库您所在的位置     从中提取数据
    • 选择目标:DataSource(ServerName)和将数据提取到
    • 的数据库
    • 映射表
    • 了解PK / FK /身份

你很高兴