首页 > 解决方案 > 将数据从一台服务器复制到另一台服务器

问题描述

我的源服务器为 ABC,目标服务器为 XYZ

我需要将一些表从 ABC 复制到 XYZ,但我不需要所有记录,我只需要一天的数据,我需要每天刷新?

有人可以建议如何做到这一点吗?

标签: sql-server

解决方案


如果这两个数据库是on same server您可以按照以下步骤操作:

  1. 在 ABC 数据库中创建副本表。
  2. 每天使用 SQL Server 代理创建 SQL Server 计划作业以运行以下脚本:
truncate XXXTable; --clear XXXTable
insert into XXXTable select * from XYZ..XXXTable; --copy 

如果您的两个数据库是not on same server您可以按照以下步骤操作:

  1. dblink在 ABC 数据库中创建一个 XYZ 。
EXEC master.dbo.sp_addlinkedserver  @server = N'Server ',   @srvproduct=N'SQL Server' ;  
GO  
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'dblinkName',@useself=N'False',@locallogin=NULL,@rmtuser=N'sa',@rmtpassword='########';
GO
  1. 在 ABC 数据库中创建副本表。
  2. 每天使用 SQL Server 代理创建 SQL Server 计划作业以运行以下脚本:
truncate XXXTable; --clear XXXTable
insert into XXXTable select * from [dblinkname].XYZ..XXXTable; --copy 

编辑

如何仅复制一天的数据

您必须添加一个 createtime 列并使用sysdate -1 day它来过滤一天的数据,例如:

CREATE TABLE T1
  ([val] int, [createDate] datetime)
;

INSERT INTO T1
  ([val], [createDate])
VALUES
  (1, '2019-11-03 00:00:00'),
  (2, '2019-11-03 00:00:00'),
  (3, '2019-11-02 00:00:00'),
  (4, '2019-11-02 00:00:00'),
  (5, '2019-11-01 00:00:00')
;

GO
5 行受影响
CREATE TABLE T2
  ([val] int, [createDate] datetime)
;
GO
select Convert(date, dateadd(day,-1,getdate()))  
GO
| (无列名) |
| :----------------- |
| 2019 年 2 月 11 日 00:00:00 |
insert into T2
select * from T1
where createDate = Convert(date, dateadd(day,-1,getdate()))  
GO
select * from T2
GO
值 | 创建日期         
--: | :-----------------
  3 | 2019 年 2 月 11 日 00:00:00
  4 | 2019 年 2 月 11 日 00:00:00

db<>在这里摆弄


推荐阅读