1

現在、データベースの照合を変更しています。

列の1つを(データ型varchar(max)で)変更しようとすると、次のエラーが発生するという問題が発生しました。

Cannot create a row of size 8083 which is greater than the allowable maximum row size of 8060.

最大のポストのサイズを確認すると。

select top 1 LEN(Document) as l1,* from GroupDocument where LEN(document) > 8000 order by LEN(document) desc

サイズは39431で、約10ページになります。

これが、照合を変更できない理由だと思います。私は他の列で以前にこの問題に遭遇したことはありません。どんな助けでもいただければ幸いです。

1つの解決策は、テーブルのすべてのコンテンツを別のテーブルにコピーし、照合を変更してから、元に戻すことだと思います。しかし、可能であれば、私はそれをしたくありません。

編集:

次のことを試しました。

テーブルtemptableを作成します(id int、document nvarchar(max))

temptable(id、document)に挿入し、GroupDocumentID、GroupDocumentからDocumentを選択します

alter table GroupDocument drop column Document alter table temptable alter column document nvarchar(max)ALTER TABLE [GroupDocument] add [Document] ntext COLLATE Finnish_Swedish_CI_AS NULL

GroupDocument set Document =を更新します(temptable.id = GroupDocument.GroupDocumentIDであるtemptableからtemptable.documentを選択します)

それでも同じ問題。

問題を引き起こしている行には7996バイトのvarcharがあり、+いくつかのintはそれを境界ケースにしていると思います。

4

1 に答える 1

0

より大きな値を行外に強制する組み合わせを行いました。

EXEC sp_tableoption 'dbo.GroupDocument', '行外の大きな値の型', 1

テーブルの掃除。

dbcc cleantable('ExamDoc', 'groupdocument', 0)

最後に、テーブルのインデックスを削除して再構築します。

問題を解決しました!:D

于 2013-01-10T13:41:53.420 に答える