徵狀
假設您在 Microsoft SQL Server 2014 中有一個具有聚集列存儲索引的資料表。 您可以針對資料表執行 DDL 查詢,以變更現有資料行的資料類型。 例如,您可以執行下列命令,將 Column_1 Table_1 的資料類型從 VARCHAR (499)更新為 NVARCHAR (500):
ALTER TABLE Table_1 ALTER COLUMN Column_1 NVARCHAR(500) NOT NULL
在這種情況下,會發生多重宣告失敗,而且您會收到下列錯誤訊息:
位置 <: > \xmcolenc.inl :413Expression: PF_CURRENT_STATUS = = PFS_OK (在 XMColumnEncoder<未簽署的 char *>:: EncodeValueForSecondary) SPID: <SPID>程式識別碼: <程式 識別碼 >說明: hr:0X0Location: <檔案 路徑> \xmerror.cpp:43Expression:0(在 PFSetLastError) SPID: <程式識別碼>說明: hr:0x0
此外,系統會在 SQL Server 錯誤記錄資料夾中產生多個記憶體傾印檔案,並在 SQL Server 錯誤記錄中記錄多個類似下列的錯誤訊息:
<日期時間> Spid<ID> * * * 堆疊轉儲會傳送至 <磁片名稱>: \Program Files\Microsoft SQL Server\MSSQL12。SQL2014\MSSQL\LOG\SQLDump0002.txt<日期時間> Spid<ID> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * <日期時間> spid<ID > * <日期時間> spid<識別碼> * 開始堆疊轉儲: <的日期時間> spid <識別碼> * <日期時間> spid <Id>< * 私人伺服器組建> Spid<Id > 。 <日期時間> Spid<ID > * <日期時間> spid<ID > * 位置: <檔路徑> \xmcolenc.inl: 413<日期時間> spid<ID > * 運算式: PF_CURRENT_STATUS = = PFS_OK<日期時間> spid<> * (在 XMColumnEncoder<無符號字元集 *> :: EncodeValueForSecondary) <> 的日期時間<spid> id Date Time<* 60: 3680<日期時間> Spid<Id> * 描述: hr: 0X0<的日期時間> Spid <識別碼> * <日期時間> spid<識別碼> * 輸入緩衝區136位元組-<日期時間> spid<識別碼> * ALTER TABLE Table_1 變更欄 COL1 NVARCHAR (500) NOT Null;
解決方案
在您套用此熱修復程式後,當 DDL 查詢失敗時,您可能會收到下列新的錯誤訊息:
ALTER TABLE 語句失敗,因為次要字典已達到最大大小限制。 考慮刪除資料列索引、變更資料行,然後建立新的資料列索引
此修正程式也可防止在 SQL Server 錯誤記錄中產生記憶體傾印檔案。此問題首先是在 SQL Server 的下列累積更新中修正:
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 我們建議您下載並安裝最新的 SQL Server 累積更新:
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。