有没有一种方法可以每天用新的用户列表“更新”现有表,而不是每天运行整个查询来替换表?

时间:2019-04-26 07:17:28

标签: sql sql-server

我正在一项作业中运行查询,该作业每天都会在MS SQL中更新用户列表。 下面的查询每天运行以更新数据

if object_id('report.dbo.data') is not null    
drop table report.dbo.data
 SELECT
 UserID,
date
into report.dbo.data
 from data a
 where date >= '2019-01-01'
 and date < getdate()

此查询的目标是每天更新用户列表。这里的问题是,每天运行它需要更长的时间。

例如,我可能已经有数据到2019年4月20日。由于我每天运行一次,因此数据将从01/01/2019到04/25/2019再次运行,而不仅仅是使用04/20/2019-04/25/2019的新用户ID更新。

与运行整个代码以刷新所有数据相比,您可以通过示例代码为我提供带有新数据更新report.dbo.data的示例代码吗?

2 个答案:

答案 0 :(得分:1)

您的代码将删除并重新创建整个表,而不仅仅是表的数据(内容)。如果它不存在,请创建一个空表report.dbo.data并仅追加新数据。

if object_id('report.dbo.data') is null
    SELECT UserID, date into report.dbo.data from data a where 1=0  -- create empty table if needed

insert into report.dbo.data(UserID, date)     -- append new data
    (SELECT UserID, date from data a where date > (select max(date) from data) and date < getdate())

答案 1 :(得分:0)

通过'2019-01-01'传递max(date) from data代替硬编码日期。

Insert into  report.dbo.data
SELECT UserID, date from data a where date >= (select max(date) from data ) and date < getdate()