2017-09-04 70 views
0

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

让我来举个例子。

首先,(在12:00:00)

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

我要在这里选择的所有数据。

SELECT * 
FROM 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可能不适用于我的情况。我如何在具体的情况下处理它?

+0

*“我的想法是我需要保留一个标识符,表明id的交易或类似的东西”* - 这是一个很好的开始。你卡在哪里?用什么语言编写的应用程序? –

+0

为什么不把'orderId'的最后一个值保存在一个变量中,并运行'select * from table where orderId> yourvariable'? – MatSnow

+1

您可能正在寻找'更改数据捕获'或'更改跟踪'吗?无论哪种方法都是正确的方法取决于许多其他因素 - 例如您需要什么w.r.t.更新和删除。 –

回答

0

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

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

  1. 通过维护标识符的最大值来做到这一点。维护它到变量,会话参数,等等

    select * 
    from table 
    where orderId > yourvariableValue 
    
+1

我已经更新了真实的表格,在这种情况下,它似乎不起作用。 – sunsets

+0

您必须通过DateTime替换标识符并需要存储时间并仅将其与时间字段进行比较。 –

0

你需要始终保存在某个地方最大orderId你在你最后select然后已经有了,知道orderId,用它在select,像这样:

select ... 
from ... 
where orderId > 4 
+0

这是一个好主意,但在我的情况下,它更复杂。对不起,我以前没有让你知道。它可能完全不同...... – sunsets

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; 
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可能不总是增加?它可以倒退吗?你需要解释。