徵狀

您可以在執行 Microsoft SQL Server 2012、2014或2016的伺服器上,將資料庫資料表中資料行的資料類型從 Ntext 變更為 Nvarchar (max) 。 當您新增超過4000條記錄來更新資料表時,DBCC CHECKDB 可能會報告如下所示的錯誤:

Msg 8961、Level 16、State 1、 LineNumber 資料表錯誤: ObjectIDindexIDPARTITIONIDallocUnitID (類型 LOB 資料)。 在頁面(PageID)、槽0、 textID 與(PageID)、槽0中的 [離列資料] 節點不符合其參照。 Msg 8961、Level 16、State 1、 LineNumber 資料表錯誤: ObjectIDindexIDPARTITIONIDallocUnitID (類型 LOB 資料)。 在頁面(PageID)、槽0、 textID 與(PageID)、槽0中的 [離列資料] 節點不符合其參照。 Msg 8929、Level 16、State 1、 LineNumberObjectIDindexIDpartitionIDallocUnitID (輸入列內資料):在非資料列資料中發現錯誤,且由 RID 所辨識的資料記錄所擁有的 識別碼 = (RID) "TableName" 的 DBCC 結果。 物件 "TableName" 的1頁中有1列。 CHECKTABLE 發現資料表 "TableName" (ObjectID)中出現0個分配錯誤和3個一致性錯誤。 repair_allow_data_loss 是 DBCC CHECKTABLE (DatabaseName. TableName)找到之錯誤的最低修復層級。 DBCC 執行已完成。 如果 DBCC 已列印錯誤訊息,請與您的系統管理員聯繫。

解決方案

此問題已在 SQL Server 的下列累積更新中修正:

SQL Server 2016 RTM 的累積更新5

SQL Server 2016 SP1 的累積更新2

SQL Server 2014 SP2 累積更新4

SQL Server 2014 SP1 累積更新11

SQL Server 2012 累積更新 7 Service Pack 3

每個新的 SQL Server 累積更新包含前一個累積更新中所包含的所有修復程式和安全性修正程式。查看 SQL Server 的最新累計更新:

SQL Server 2016 的最新累計更新

SQL Server 2014 的最新累計更新

SQL Server 2012 SP3 的最新累計更新

因應措施

若要在變更資料類型後解決這個問題,請將 [ 大型數值型別不列 ] 選項設定為 1

ALTER TABLE TableName ALTER COLUMN COLUMN_NAME nvarchar(max) NOT NULL 
go
exec sp_tableoption 'TableName', 'large value types out of row', '1'

狀態

Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。

參考

瞭解 Microsoft 用於描述軟體更新的 術語

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×