仅从SQL Server获取新数据

时间:2017-09-04 08:46:51

标签: sql-server

我已经运行了我的应用程序,它定期从SQL Server获取数据。这里的问题是我想获取自上次阅读以来创建的记录。

让我举个例子。

首先,(在12:00:00)

Table
---------
orderId orderName
1       name1
2       name2
3       name3
4       name3

我将在此处选择所有数据。

SELECT *
FROM TABLE

一分钟后,一些数据被添加到TABLE中,如下所示,

Table
---------
orderId orderName
1       name1
2       name2
3       name3
4       name3
5       name4
6       name5

此时,当我选择如下数据时,

select *
from TABLE

我想得的是排号。 5和第6行,在我之前选择之后添加。

我的想法是我需要保留一个标识符来表示id的交易或类似的事情,但我仍然没有听清楚......你能帮助我吗?任何帮助我的关键字或链接?

对我来说,实现刷新事件以获得具有我期待的想法的新数据会很有帮助。

谢谢大家,这里有我更具体的表格。

Table
---------
orderId      orderTime
1       2017-9-4 8:00:00.000
1       2017-9-4 8:00:10.000
1       2017-9-4 8:00:20.000
1       2017-9-4 8:00:30.000
1       2017-9-4 8:00:40.000
1       2017-9-4 8:00:50.000

2       2017-9-4 8:00:11.000
2       2017-9-4 8:00:20.000
2       2017-9-4 8:00:32.000
2       2017-9-4 8:00:40.000

时间记录将分别根据orderId连续添加。多数人认为我保留最后一个orderId可能对我的情况不起作用。在具体情况下如何处理?

4 个答案:

答案 0 :(得分:1)

没有任何关键字可以识别上次执行的最新条目。因为,您的查询在不同的会话上运行时间。所以,你无法识别它。

但基本上,我们还有其他选择来完成这项任务。

  1. 使用维护标识符的最大值来执行此操作。将它保存到变量,会话,参数等......

    select * 
    from table 
    where orderId > yourvariableValue
    

答案 1 :(得分:0)

您需要始终保存上次orderId所获得的最大select,然后知道orderId,在select中使用它,就像这样:

select ...
from ...
where orderId > 4

答案 2 :(得分:0)

将最后一个orderId 存储在变量中的相关最后一个orderTime。
这应该可以按你的意愿工作。

DECLARE @lastOrderId int = 2
DECLARE @lastOrderTime datetime = '2017-9-4 8:00:40.000'

SELECT * FROM Table
WHERE (orderId = @lastOrderId AND orderTime > @lastOrderTime) OR orderId > @lastOrderId
ORDER BY orderId, orderTime;

答案 3 :(得分:0)

我看到很多关于保存会话,变量等的模糊建议。我建议你只使用表格本身:

找到本地表中的最后一个键:

SELECT ISNULL(MAX(OrderID),0) FROM TABLE

用它来决定从远程表中选择什么

DECLARE @MaxID INT
SELECT @MaxID = ISNULL(MAX(OrderID),0) FROM TABLE


INSERT INTO TABLE (OrderID, Col1, Col2)
SELECT OrderID, Col1, Col2
FROM REMOTETABLE
WHERE OrderID > @MaxID

我看到你最近编辑说这可能行不通。你需要解释为什么没有人有任何帮助的机会。是因为OrderID可能并不总是递增?可以倒退吗?你需要解释一下。