Sql-Server

SQL Server 2012 的合併語句 + 複製差異

  • March 5, 2022

我們有一個 SSIS 包,它將從源數據庫中提取並執行合併語句以將數據放入“主”數據庫。(最終,“主”數據庫將成為事實的來源,但我們距離那個還有一段時間。)

主數據庫獲取數據後,會將其複製到其他幾個數據庫。

使用 Sql Server 2008 R2 這一切都很好。

但是在 SQL Server 2012 中,我們注意到有一堆刪除語句用於這些表被複製。

SSIS 包中的 Merge 語句不會刪除任何內容。

when NOT MATCHED BY SOURCE then 
   update set IsActive = 0

所以我想知道為什麼會這樣。SQL Server 2012 可以將我MATCHED Update轉換為刪除和插入嗎?(這似乎很瘋狂,但我似乎無法弄清楚為什麼會這樣)。

注意:我們關閉了刪除語句的複制並且問題停止了,但我想知道發生了什麼。

當源似乎沒有變化時,為什麼我會看到這麼多刪除?

有沒有辦法可以查看針對錶格發布的交易?

注意:我嘗試進行 SQL 跟踪,但沒有顯示任何刪除。只有我上面描述的合併。

你能檢查文章屬性 –> 聲明傳遞 –> 更新傳遞格式 – 它設置為什麼?

要添加的另一件事 - 請驗證是否更新了屬於唯一約束的任何列。如果這是真的,這意味著 SQL Server 正在將更新實現為延遲更新,這意味著作為一對 DELETE/INSERT 操作。這種“延遲更新”會導致複製向訂閱者發送一對 DELETE/INSERT 語句。參考:這裡

要確保更新不作為一對刪除和插入語句執行,您可以在發布伺服器上啟用跟踪標誌 8207。

引用自:https://dba.stackexchange.com/questions/41859