我可以在行版本上選擇行嗎?選擇行版本
我正在定期查詢數據庫表中的新行。 我想存儲最後一行版本,然後讀取先前存儲的行版本中的所有行。
我無法添加任何東西到表中,PK不會順序生成,並且沒有日期字段。
是否有任何其他方式來獲取自上次查詢以來新增的所有行?
我正在創建一個新表,其中包含已處理的行的所有主鍵,並將在該表上加入以獲取新行,但我想知道是否有更好的方法。
EDIT
這是表的結構:除了PRODUCT_ID和stock_code
一切是描述產品領域。
我可以在行版本上選擇行嗎?選擇行版本
我正在定期查詢數據庫表中的新行。 我想存儲最後一行版本,然後讀取先前存儲的行版本中的所有行。
我無法添加任何東西到表中,PK不會順序生成,並且沒有日期字段。
是否有任何其他方式來獲取自上次查詢以來新增的所有行?
我正在創建一個新表,其中包含已處理的行的所有主鍵,並將在該表上加入以獲取新行,但我想知道是否有更好的方法。
EDIT
這是表的結構:除了PRODUCT_ID和stock_code
一切是描述產品領域。
您可以將rowversion轉換爲bigint,然後當您再次讀取行時,將該列轉換爲bigint並與先前存儲的值進行比較。這種方法的問題是每次選擇基於rowversion轉換時的表掃描 - 如果源表很大,這可能會很慢。
我還沒有嘗試過這個持久化的計算列,我很想知道它是否工作正常。
示例代碼(在SQL Server 2008 R2測試):
DECLARE @TABLE TABLE
(
Id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Data VARCHAR(10) NOT NULL,
LastChanged ROWVERSION NOT NULL
)
INSERT INTO @TABLE(Data)
VALUES('Hello'), ('World')
SELECT
Id,
Data,
LastChanged,
CAST(LastChanged AS BIGINT)
FROM
@TABLE
DECLARE @Latest BIGINT = (SELECT MAX(CAST(LastChanged AS BIGINT)) FROM @TABLE)
SELECT * FROM @TABLE WHERE CAST(LastChanged AS BIGINT) >= @Latest
編輯:看來我誤解,你實際上並沒有一個ROWVERSION列,你剛纔提到的行版本作爲一個概念。在這種情況下,SQL Server Change Data Capture將是我能想到的唯一符合法案的事情:http://technet.microsoft.com/en-us/library/bb500353(v=sql.105).aspx
不確定這是否符合您的需求,因爲您需要能夠存儲LSN 「上次查看時間」,以便您可以正確查詢CDC表。它更適合於數據加載而不是典型查詢。
假設你可以創建一個臨時表中,EXCEPT
命令似乎是你所需要的:
請注意,臨時表只需包含所需的密鑰。如果這只是一列,你可以去NOT IN
而不是EXCEPT
。
你不能改變你的表格模式嗎? – Kaf
不是,這不是我的桌子;我只是從中拉行。 – Bvrce