1
我目前在SQL Server 2008測試變更跟蹤機制跟蹤並發現了一些:更改SQL Server 2008中,毫無意義的刪除操作
當基表(其他城市跟蹤)我插入一個新的記錄,並使用刪除同樣的 鍵,選擇與改變返回給我的信息,它應該在遠程表中刪除,但該記錄根本不存在在該表中。
爲什麼它的功能是這樣?
示例代碼:
CREATE TABLE TEST (
ID UNIQUEIDENTIFIER primary key,
value int
)
ALTER TABLE [dbo].Test
ENABLE CHANGE_TRACKING
SELECT CHANGE_TRACKING_CURRENT_VERSION()
SELECT CT.SYS_CHANGE_OPERATION, CT.ID, IV.value
FROM CHANGETABLE(CHANGES TEST, 51374) CT
LEFT JOIN TEST IV ON IV.ID = CT.ID
--zero changes now for: 51374
insert into Test VALUES ('54C1D80E-ACB0-433F-94DF-7D06FE809E22', 1)
delete from Test where id = '54C1D80E-ACB0-433F-94DF-7D06FE809E22'
select * from Test -- table is empty (insert and delete)
SELECT CT.SYS_CHANGE_OPERATION, CT.ID, IV.value
FROM CHANGETABLE(CHANGES TEST, 51374) CT
LEFT JOIN TEST IV ON IV.ID = CT.ID
--however for Anchor: 51374 it claims I should delete the record ...
我的基座和遠程表都同步於51374錨。 添加和刪除記錄不應該給我的信息刪除 的東西,我沒有在我的遠程表...
這就是文檔中的所有內容,真正「只需要一行已更改的事實,而不是行已更改的次數或任何中間更改的值」,「如果應用程序需要有關所有更改和已更改數據的中間值,使用更改數據捕獲,而不是更改跟蹤「 –
我不需要所有更改的信息,但是當ID:1的行已被插入並刪除在時間x(客戶端在時間x處錨定)之後,爲什麼「更改跟蹤」給了我信息,我應該刪除一些我沒有的信息......我不明白。 – John
想象一下,如果你有一行ID 1,你知道。然後在某個時期,某人進入並刪除該行,然後添加具有相同ID的新行。即使您已經知道ID爲1的行並且沒有看到刪除,更改跟蹤也會爲您提供插入。這是野獸的本質 - 你只能得到最後的改變,你必須與你的現實版本調和。如果你看到一行你不知道的刪除行,*忽略它*。 –