Ошибка: связать XSD с столбцом типа данных XML - "Невозможно создать строку размера"

62
6

Я получаю следующую ошибку при связывании и 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]);

В чем причина этого и что исправить? Спасибо.

спросил(а) 2014-04-30T10:48:00+04:00 6 лет, 11 месяцев назад
1
Решение
87

Ваша таблица уже приблизилась к пределу 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

ответил(а) 2014-04-30T10:53:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема