Изменение сопоставления на колонке с многостраничными рядами

Мы находимся в процессе изменения сопоставления нашей базы данных.

Мы столкнулись с проблемой, когда я пытаюсь изменить одну из колонок (с типом данных varchar (макс.)), я получаю следующую ошибку:

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 страниц.

Я предполагаю, что это - проблема, почему я не могу изменить сопоставление. Я не столкнулся с этой проблемой ранее с другими колонками. Любая помощь ценилась бы.

Я предполагаю, что одно решение состояло бы в том, чтобы скопировать все содержание стола к другому столу, сопоставлению изменения и затем положить обратно его снова. Но я не сделал бы этого, если это - possbile.

Править:

Попробованный следующее:

составьте поддающуюся соблазну таблицу (идентификационный интервал, документ nvarchar (макс.))

вставка в поддающийся соблазну (id, документ) выбирают GroupDocumentID, Документ от GroupDocument

измените таблицу Документ колонки снижения GroupDocument измените поддающуюся соблазну таблицу, изменяют документ колонки nvarchar (макс.) ALTER TABLE [GroupDocument] добавляет [Документ] ntext СОПОСТАВЛЯЮТ ПУСТОЙ УКАЗАТЕЛЬ Finnish_Swedish_CI_AS

обновите Документ набора GroupDocument = (выберите temptable.document из поддающегося соблазну где temptable.id = GroupDocument. GroupDocumentID)

Тем не менее та же самая проблема.

У ряда, который вызывает проблему, есть varchar, который составляет 7996 байтов, это +, некоторый ints делает его граничным случаем, который я предполагаю.

1
nl ja de
Вы действительно не понимаете проблему. размер ряда isn' t длина последовательности на одной колонке (и, для отчета, это может быть намного более длинно с VARCHAR (МАКС) ), это - фактический размер на байтах целого ряда, который включает каждую колонку на вашем столе
добавлено автор Lamak, источник
В этом случае у стола есть это расположение; "интервал, интервал, nvarchar (макс.), дата и время, бит, интервал, интервал". Я can' t видят любые основания для размера ряда, чтобы превысить 8060 байтов если it' s пытающийся хранить данные в колонке вместо вне ряда. Джонас также попытался вызвать использование хранения вне ряда для больших типов стоимости, используя "sp_tableoption ' Document' ' большая стоимость печатает из row' 1 дюйм.
добавлено автор brain, источник
Да, I' m знающий об этом. Вещь. Это varchar (макс.), кажется, находится в том же самом ряду, если полный размер <8060, но для особого случая полный размер просто находится под 8060, поэтому когда я пытаюсь изменить сопоставление, один дополнительный столбец, добавляется. И затем это переполняется. = (I' m не способный построить временную таблицу с информацией, пропустите колонку и затем скопируйте его. Та же самая проблема, к сожалению.
добавлено автор Jonas, источник

1 ответы

Я сделал комбинацию того, чтобы вынуждать большие ценности быть вне ряда.

ДОЛЖНОСТНОЕ ЛИЦО sp_tableoption 'dbo. GroupDocument', 'большая стоимость печатает из ряда', 1

Очистка стола.

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

и наконец понижаясь и восстанавливая индексы для стола.

Решенный проблема!: D

0
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)