我已经运行了我的应用程序,它定期从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可能对我的情况不起作用。在具体情况下如何处理?
答案 0 :(得分: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可能并不总是递增?可以倒退吗?你需要解释一下。