.png)
我正在運行 SQL Server 2008 Std,其資料庫正在「交易發布」中發布給單一訂閱者。
我們無法對發布者上的表進行任何更改,除非收到「無法修改表,因為它已發布用於複製」。這看起來很奇怪,因為模式更改(或運行腳本來執行此操作)應該推送給訂閱者。目前,我們必須刪除整個發布系統才能進行表格更改。
我缺什麼?一定有辦法更新發布者表嗎?
謝謝!
答案1
您嘗試執行的表格修改很可能是在 SSMS 的圖形表設計器中完成的。透過圖形設計器實現表格更改的效果很差。
當您儲存變更時,SSMS 會執行並將整個表複製到包含新設計的新表中,然後刪除「舊」表並重新命名新表以取代它。
請注意,列排序對於儲存在 SQL Server 中的表影響不大,無需在表的「中間」中新增列,除非它看起來更好:=)
由於您的表處於交易複製中,SSMS 無法執行後台刪除表語句,並且您會收到您注意到的錯誤訊息。
要進行所需的變更(新增或刪除列),您需要在 T-SQL 中執行命令
ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;
請注意,命令語法不一致(謝謝 MS!)。新增列不需要/允許指定關鍵字 COLUMN,而刪除則需要指定關鍵字 COLUMN。
只要您的複製正確設定為複製架構更改,這些命令就會起作用並傳播給訂閱者。
可以透過這種方式對表進行更改,但更改主鍵除外。事務複製需要 PK 才能正常運作,無法變更。如果您想要變更這些列,則需要從複製中刪除該文章。
希望有幫助。