向连接两个表的视图添加延迟

问题描述 投票:0回答:2

我必须创建一个基本上查询表 A 的视图,并确保相同的项目存在于表 B 中,因此如果表 A 中的项目不存在于表 B 中,则在我的视图中创建一条记录,以及一个外部过程触发警报。我遇到的问题是,有时会在表 A 中的记录创建几秒钟后创建表 B 中的记录,有时会触发误报。所以我需要在视图创建中添加某种延迟,如果在触发警报之前表 A 中的项目在表 B 中不存在,则等待至少 5 秒来创建记录。

所以如果我有:

表_A

物品 创作日期
XY 00:00:01

表_B

物品 创作日期
XY 00:00:03

我使用这个查询在 sql server 中创建一个视图:

select * from Table_A A
where A.Item not in (
select B.Item
from Table_B B)
where A.Creation_Date >= DATEADD(minute, -10, GETDATE())
and A.Creation_Date >= DATEADD(minute, -10, GETDATE())

如果警报过程在 00:00:02 运行,它将在视图中创建记录,并触发警报。

我怎样才能避免这种情况并等待几秒钟以确保绝对不会创建 Table_B 中的记录?

谢谢

sql sql-server where-clause date-arithmetic
2个回答
0
投票

您可以在

where
子句中添加另一个不等式条件,以排除最近的记录:

select * 
from Table_A A
where 
    A.Item not in (select B.Item from Table_B B)
    and A.Creation_Date >= DATEADD(minute, -10, GETDATE())
    and A.Creation_Date <  DATEADD(second, -10, GETDATE())

根据程序运行的频率,您可能还需要调整其他界限:

. . .
and A.Creation_Date >= DATEADD(second, -10, DATEADD(minute, -10, GETDATE()))
and A.Creation_Date <  DATEADD(second, -10, GETDATE())

0
投票

您也许可以尝试使用 not exists 并将所需的时间延迟作为相关标准的一部分包括在内:

select * 
from Table_A a
where not exists (
  select * from Table_B b
    where a.Item = b.Item
    and a.Creation_Date < DateAdd(second, -5, GetDate())
);
© www.soinside.com 2019 - 2024. All rights reserved.