【问题标题】:how to move record from one database to another database如何将记录从一个数据库移动到另一个数据库
【发布时间】:2020-07-02 13:05:11
【问题描述】:

我有两个数据库,其中两个表与所有架构相同。 我想用两个表的所有列移动员工和员工率的特定记录。 下面是查询。

CREATE TABLE #emp
(
empID INT IDENTITY(1, 1) primary key ,
Firstname varchar(20)
);

CREATE TABLE #empRates
(
ID INT IDENTITY(1, 1) primary key ,
empid int, -- foreign key from #emp
rate decimal(10,3),
startdate datetime,
enddate datetime,
);
insert into #emp (firstname) values('First')
insert into #emp (firstname) values('Second')
insert into #emp (firstname) values('Third')

insert into #empRates(empid,rate,startdate,enddate) values(1,10,'2020/01/10','2020/01/20')
insert into #empRates(empid,rate,startdate,enddate) values(1,15,'2020/01/20','2020/01/30')

insert into #empRates(empid,rate,startdate,enddate) values(2,10,'2020/01/10','2020/01/20')
insert into #empRates(empid,rate,startdate,enddate) values(3,15,'2020/01/20','2020/01/30')


select * from #emp
select * from #empRates

drop table #emp
drop table #empRates

这两个数据库都在同一台服务器上。数据库 1 和数据库 2。 在我尝试过的查询下方。

insert into database2..empRates(empid,rate,startdate,enddate) select empid,rate,startdate,enddate 

来自数据库1..empRates

这里我的问题是两个数据库都有不同的记录,所以身份不同,所以在插入其他员工费率后,会显示另一个类似混搭的费率。 我正在使用 sql server 2012。 你能提供方法吗?

【问题讨论】:

  • 只有在你的表中名字是唯一的情况下你才能这样做,否则它们之间没有关系。
  • 当表有一个自然键而不是身份代理键或除了身份代理键之外,这种任务很容易完成。
  • 所以你需要先将记录复制到某种临时表中,并在新旧 id 之间做一个映射,这样 empRates 就可以插入与 emp 匹配的 id?
  • 实际上重复不是问题,问题是如果我将员工从 database1 移动到 database2 ,在 database2 中相同的身份可能已经被另一个员工占用。所以在导入 database2 empRates 可能为其他员工错误插入。

标签: sql sql-server sql-server-2012 sql-server-2008-r2 sql-server-2016


【解决方案1】:

你应该看看这篇文章 --> How to turn IDENTITY_INSERT on and off using SQL Server 2008?

这样您可以在插入期间为 id 列指定值,因此目标数据库上的行将保留来自源的 ID。

希望对你有帮助!

【讨论】:

  • 实际上重复不是问题,问题是如果我将员工从 database1 移动到 database2 ,在 database2 中相同的身份可能已经被另一个员工占用。所以在导入 database2 empRates 可能为其他员工错误插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
相关资源
最近更新 更多