如何在特定日期范围内合并两个相同的数据库?

How I can merge two identical databases in a range date specific?

提问人:Rodrigo 提问时间:10/27/2020 最后编辑:BritsRodrigo 更新时间:10/28/2020 访问量:249

问:

我是 SQL Server 领域的新手,我收到了一项任务,即在两个相同的 SQL 数据库 (SQL Server 2000) 中合并数据表,我在两个数据库中具有相同的结构。这个想法是将所有旧数据表合并到新数据表(database2)中,直到2020年7月(database1)。

我认为这是非常简单的活动,但由于我没有使用SQL Server的经验。拜托,你能帮我吗?

我需要更新 SQL 数据库中的表,我的 SQL 数据库每 10 分钟收集一次数据。我粘贴了旧数据库(截至 2020 年 7 月 31 日的数据)、新数据库(2020 年 8 月 10 日之后的数据)和结果新数据库 + 旧数据库。

Old DB  

Time                ActivePower
31-07-2020 23:40:00 19127100
31-07-2020 23:50:00 19127094
1/8/2020 0:00       NULL    
1/8/2020 0:10       NULL    
New DB  

Time                ActivePower
31-07-2020 23:40:00 NULL
31-07-2020 23:50:00 NULL
1/8/2020            19127086
1/8/2020 0:10       19127078
New DB + Old DB 

Time                ActivePower
31-07-2020 23:40:00 19127100
31-07-2020 23:50:00 19127094
1/8/2020            19127086
1/8/2020 0:10       19127078

screenshot

数据库 SQL-SERVER-2000

评论

0赞 Gordon Linoff 10/27/2020
SQL Server 2000???多年来,这已经不再支持了。
0赞 Rodrigo 10/27/2020
是的,我正在使用这个版本。
0赞 user9601310 10/28/2020
我不确定你在这里使用的术语是否正确。您的问题指出您需要合并两个数据库,但您的示例显示您合并了两个。一个数据库可能包含数十个(或数百个或数千个)表,因此,虽然合并两个表可能很简单,但合并两个数据库可能相当复杂。那么,是否只有示例中的两个表需要合并?

答:

0赞 user9601310 10/28/2020 #1

按照您的示例,假设您要合并两个名为“OldDB”和“NewDB”的表(不是数据库),其中只有名为 Time 和 ActivePower 的两列,其中 Time 是每个的唯一标识符,您将需要运行两个单独的 SQL 语句(一个 UPDATE 和一个 INSERT)将数据从 OldDB 迁移到 NewDB(注意: 如果您有 SQL Server 2008 或更高版本,则使用单个 SQL MERGE 语句即可完成此操作。

update newdb set newdb.activepower = olddb.activepower
from newdb 
inner join olddb on newdb.time = olddb.time 
where newdb.activepower is null;

insert into newdb 
select olddb.* from olddb 
left join newdb on newdb.time = olddb.time 
where newdb.time is null;

附加说明:这也假设您只更新当前没有 ActivePower 值的 NewDB 记录。