Sql server 2008 更改具有多页行的列的排序规则
我们正在更改数据库的排序规则 我们遇到了一个问题,当我试图用数据类型varcharmax更改其中一列时,我得到了以下错误:Sql server 2008 更改具有多页行的列的排序规则,sql-server-2008,Sql Server 2008,我们正在更改数据库的排序规则 我们遇到了一个问题,当我试图用数据类型varcharmax更改其中一列时,我得到了以下错误: 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) >
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页
我假设这就是为什么我不能更改排序规则的问题。我之前在其他专栏中没有遇到过这个问题。任何帮助都将不胜感激
我想一种解决方案是将表中的所有内容复制到另一个表中,更改排序规则,然后再次将其移回。但如果可能的话,我宁愿不那样做
编辑:
尝试了以下操作:
创建表诱惑id int,文档nvarcharmax
插入诱惑id,文档选择GroupDocumentID,文档来自GroupDocument
altertablegroupdocument下拉列文档
alter table TENTABLE alter column document nvarcharmax
更改表格[GroupDocument]添加[Document]ntext将芬兰语和瑞典语对比为NULL
更新GroupDocument set Document=从诱惑中选择诱惑.Document,其中诱惑.id=GroupDocument.GroupDocumentID
还是一样的问题
导致问题的行有一个7996字节的varchar,加上一些int,我猜这是一个边界情况。我做了一个组合,强制将较大的值移出行 EXEC sp_table选项“dbo.GroupDocument”, “行外的大值类型”,1 打扫桌子 dbcc cleantable'ExamDoc','groupdocument',0 最后删除并重建表的索引
解决了问题!:D你没有真正理解这个问题。行大小不是一列上字符串的长度,而且,作为记录,使用VARCHARMAX时它可能会更长,它是整行字节的实际大小,包括表中的每一列是的,我知道这一点。事情是这样的。如果总大小<8060,则varcharmax似乎位于同一行中,但对于特殊情况,总大小刚好小于8060,因此当我尝试更改排序规则时,会添加一个额外的列。然后它就溢出来了我无法使用该信息构建临时表,请删除该列,然后复制它。不幸的是,同样的问题。在这种情况下,表具有这种布局;int,int,nvarcharmax,datetime,bit,int,int。我看不出行大小超过8060字节的原因,除非它试图将数据存储在列中而不是行外。Jonas还尝试使用sp_table选项“Document”、“行外大值类型”1强制对大值类型使用行外存储。