错误:将 XSD 与 XML 数据类型列关联 - "Cannot create a row of size"



在将和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列

相关内容

最新更新