【发布时间】: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