現象
Microsoft SQL Server 2012、2014、または2016を実行しているサーバーで、データベーステーブル内の列のデータ型を ntext から nvarchar (max) に変更します。 4000を超えるレコードを追加してテーブルを更新すると、DBCC CHECKDB で次のようなエラーが報告されることがあります。
Msg 8961、レベル16、州1、 LineNumber テーブルエラー: ObjectID、 indexID、 partitionID、 allocUnitID (LOB データ型)。 ページ (PageID)、スロット0、 textid のオフ行データノードは、ページ (PageID)、スロット0からの参照と一致しません。 Msg 8961、レベル16、州1、 LineNumber テーブルエラー: ObjectID、 indexID、 partitionID、 allocUnitID (LOB データ型)。 ページ (PageID)、スロット0、 textid のオフ行データノードは、ページ (PageID)、スロット0からの参照と一致しません。 Msg 8929、レベル16、状態1、 LineNumberObjectID、 indexID、 partitionID、 allocUnitID (行データの入力): RID = (Rid) で識別されるデータレコードによってIDが含まれる、オフローデータ内のエラー "TableName" の DBCC の結果。 オブジェクト "TableName" の1ページに1つの行があります。 CHECKTABLE は、テーブル 'TableName' (ObjectID) で、0の割り当てエラーと3つの一貫性エラーを検出しました。 repair_allow_data_loss は、DBCC CHECKTABLE (DatabaseName) で検出されたエラーの最小修復レベルです。 DBCC の実行が完了しました。 DBCC でエラーメッセージが表示された場合は、システム管理者に問い合わせてください。
解決方法
この問題は、SQL Server の次の累積的な更新プログラムで修正されています。
SQL Server 2016 RTM の累積更新プログラム5
SQL Server 2016 SP1 の累積更新プログラム2
SQL Server 2014 SP2 の累積更新プログラム4
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとセキュリティの修正が含まれています。SQL Server の最新の累積的な更新プログラムを確認します。
SQL Server 2016 の最新の累積的な更新プログラム
回避策
データ型を変更した後でこの問題を回避するには、[ 大きい値の種類] を [行のサイズから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 でソフトウェアの更新について説明する 用語 について説明します。