在将和XSD关联到表中的XML数据类型列时,出现以下错误。
"Cannot create a row of size XXXX which is greater than the allowable maximum of 8060"
下面是SQL语句:
ALTER TABLE PPHGrader_PreferenceData ALTER COLUMN Pref_Data XML ([dbo].[PrefDataSchemaInstrEdit]);
造成这种情况的原因是什么?解决方法是什么?非常感谢。
您的表已经接近8060的极限。添加一个BLOB列(就像XML类型一样(需要另外24个字节,并将其推到这个限制之上。请参阅SQL Server表中的列以了解发生了什么,并获得一些查询以查看物理表布局:
select p.index_id, p.partition_number,
pc.leaf_null_bit,
coalesce(cx.name, c.name) as column_name,
pc.partition_column_id,
pc.max_inrow_length,
pc.max_length,
pc.key_ordinal,
pc.leaf_offset,
pc.is_nullable,
pc.is_dropped,
pc.is_uniqueifier,
pc.is_sparse,
pc.is_anti_matter
from sys.system_internals_partitions p
join sys.system_internals_partition_columns pc
on p.partition_id = pc.partition_id
left join sys.index_columns ic
on p.object_id = ic.object_id
and ic.index_id = p.index_id
and ic.index_column_id = pc.partition_column_id
left join sys.columns c
on p.object_id = c.object_id
and ic.column_id = c.column_id
left join sys.columns cx
on p.object_id = cx.object_id
and p.index_id in (0,1)
and pc.partition_column_id = cx.column_id
where p.object_id = object_id('PPHGrader_PreferenceData')
order by index_id, partition_number;
如果幸运的话,那么一些空间来自已删除的列,在这种情况下,您可以重新生成表以清除这些空间,然后重试。如果你真的每行使用8060个字节,并且没有丢弃占用空间的列,那么你需要减少大小:
- 将固定长度列CHAR/NCHAR/BINARY更改为可变长度类型VARCHAR/NVARCHAR/VARBINARY
- 规范化对象模型以减少属性数量
- 如果每行仍需要更多空间,请使用SPARSE列