徵狀
假設您在 Microsoft SQL Server 2008 中使用事務性複製,且在該發佈上執行更新查詢。 當您將 SQL Server 升級至 SQL Server 2012 或 SQL Server 2014,且更新查詢未在升級之前發佈時,記錄讀取器代理程式可能會失敗,並出現下列錯誤:
<Date> <Time> Publisher: {call sp_replcmds (500,0,0,,0,500000)}<日期> <時間> 狀態:0,代碼:20011,text: "進程無法執行" sp_replcmds ",< Publisher Name>". "。<Date> <Time> 進程無法在「<Publisher Name>」上執行「sp_replcmds '。<Date> <Time> 複製代理程式狀態: 6<日期> <時間> 狀態:0,代碼:542,文字:「遇到不正確 datetime 值。 值超過9999年。」。<Date> <Time> 狀態:0,代碼:3621,文字: ' 語句已終止。」。<Date> <Time> 狀態:0,代碼:22037,文字:「進程無法執行」 sp_replcmds '<發行者名稱>'。」。
即使沒有發生這個問題,更新語句的已升級記錄記錄仍可以透過記錄讀取程式代理程式誤解,而且在發佈代理程式中可能會發生下列錯誤:
515無法將值 Null 插入欄 '<資料行名稱>'、資料表 '<資料表名稱>';欄不允許 null 值。 更新失敗。
注意:
-
不同的資料類型和限制可能會導致報告不同的錯誤,而且這個問題甚至可能造成不收斂。
-
當您從 SQL Server 2008 或 SQL Server 2008 R2 升級至 SQL Server 2012 或 SQL Server 2014 時,就會發生此問題。
解決方案
如果錯誤 "515 無法將值 Null 插入欄 '<欄名>"、table "<資料表名稱>";欄不允許 null 值。 [發佈代理程式已發生更新失敗],您應該重新初始化複製。 此熱修復程式無法修正此錯誤。 若要避免這種錯誤,您應該先停用記錄閱讀程式代理程式,然後再升級至此修正程式,然後重新啟用記錄讀取程式代理程式。此問題最初是在 SQL Server 的後續累積更新中修正。
SQL Server 2012 SP2 累積更新2 /en-us/help/2983175
SQL Server 2014 累積更新3 /en-us/help/2984923
SQL Server 2012 SP1 累積更新11 /en-us/help/2975396
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。