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 页。

我认为这是我无法更改排序规则的问题。我之前在其他专栏中没有遇到过这个问题。任何帮助,将不胜感激。

我想一种解决方案是将表的所有内容复制到另一个表,更改排序规则,然后再次将其移回。但如果可能的话,我宁愿不这样做。

编辑:

尝试了以下方法:

创建表 temptable (id int, document nvarchar(max))

插入到 temptable (id, document) 中选择 GroupDocumentID, Document from GroupDocument

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

update GroupDocument set Document = (select temptable.document from temptable where temptable.id = GroupDocument.GroupDocumentID)

还是同样的问题。

导致问题的行有一个 7996 字节的 varchar,+ 一些整数使它成为我猜的边界情况。

4

1 回答 1

0

我结合了强制较大的值超出行列。

EXEC sp_tableoption 'dbo.GroupDocument', '行外的大值类型', 1

清洁桌子。

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

最后删除并重建表的索引。

解决了问题!:D

于 2013-01-10T13:41:53.420 回答