2009-06-14 81 views
1

我有一個合併複製的情況下,與SQL2005 SP3作爲發行商和分銷和Windows Mobile SQLCE 3.5 SP1的用戶。SQL合併複製:如何判斷一個記錄已被複制

複製過濾器是這樣的,從所述表(tblJobs)中的一個的行只去正好一個設備。設備複製完成後,它執行sql以在所下載的所有記錄上設置IsSynced布爾列,然後再次複製。

有什麼方法可以讓我避免了二次複製和有IsSynced布爾列在複製過程中設置的? (也許首先下載,設置標誌,然後上傳?或者可能讓發佈者/分發者的複製過程設置標誌?)。我不知道這些東西的鉤子在哪裏。

可能值得一提的是表中有一個rowversion字段。

回答

1

最簡單的方式告訴如果已複製的記錄是檢查MSmerge_contents表。如果該行存在於該表中,那麼它之前已被複制。

當然,如果你想確保客戶擁有最新版本的數據行,那麼你就需要做一些挖掘下表爲世代號:

MSmerge_replinfo 
MSmerge_genhistory 
MSmerge_contents 
MSmerge_tombstone 

每次數據通過爲變更分配新的世代號碼,合併複製跟蹤此更改。發佈者然後保存世代號碼列表和每個訂戶已經收到的世代。

簡單地做對用戶行數據的批量更新將迫使該變化被複制到發佈者。

不幸的是,我不知道一個簡單的方法來更新列,除非你不復制該列在首位 - 也就是說,使用垂直(列)劃分排除。

0

不知道你真的想要的東西,但如果你要分辨那些起源於這種情況下從來到這裏,從通過複製其他情況下,那些記錄,要做到這一點的一種方法是有一個Origin列中,並將其默認爲每臺服務器上的唯一值。