症狀
假設您在 Microsoft SQL Server 2014 中有一個具有叢集資料行存放區索引的資料表。 您可以對資料表執行 DDL 查詢,以變更現有資料行的資料類型。 例如,您可以執行下列命令,將Table_1 Column_1的資料類型從 VARCHAR (499) 更新為 NVARCHAR (500) :
ALTER TABLE Table_1 ALTER COLUMN Column_1 NVARCHAR(500) NOT NULL
在此情況下,會發生多個判斷提示失敗,您會收到下列錯誤訊息:
注意
位置: <檔案路徑>\xmcolenc.inl:413
運算式: PF_CURRENT_STATUS == PFS_OK
XMColumnEncoder< 中的 (unsigned char *>::EncodeValueForSecondary)
SPID: <SPID>
處理序識別碼: <處理序識別碼>
描述:hr:0x0
位置: <檔案路徑\>xmerror.cpp:43
運算式:0
PFSetLastError) 中的 (
SPID: <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<ID>* <日期時間> spid<ID>
<
日期時間> spid<ID>* 私人伺服器組建。
<
日期時間> SPID<ID>*
<
日期時間>SPID<識別碼>* 位置:檔案路徑>\ < xmcolenc.inl:413
<
日期時間> spid<ID>* 運算式: PF_CURRENT_STATUS == PFS_OK
<
日期時間>spid<識別碼>* XMColumnEncoder< 中的 (unsigned char *>::EncodeValueForSecondary)
<
日期時間> SPID<識別碼>* SPID:60
<
日期時間> SPID<識別碼>* 處理序識別碼: 3680
<
日期時間> SPID<ID>* 描述: hr:0x0
<
日期時間> SPID<ID>*
<
日期時間> SPID<ID>* 輸入緩衝區 136 位元組 -
<
日期時間> SPID<ID>* ALTER TABLE Table_1 ALTER COLUMN COL1 NVARCHAR (500) NOT NULL;
解決方式
套用此 Hotfix 之後,當 DDL 查詢失敗時,您可能會收到下列新的錯誤訊息:
注意
ALTER TABLE 陳述式失敗,因為次要字典已達到大小上限。 請考慮捨棄資料行存放區索引、變更資料行,然後建立新的資料行存放區索引
此修正程式也會防止在 SQL Server 錯誤記錄檔中產生記憶體傾印檔案。
此問題已先在下列 SQL Server 累積更新中修正:
建議:安裝最新的 SQL Server 累積更新
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 我們建議您下載並安裝 SQL Server 的最新累積更新:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。