2017-09-04 92 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可能不總是增加?它可以倒退嗎?你需要解釋。