максимальный размер строки превышен при копировании поля varbinary (max) - PullRequest
3 голосов
/ 14 марта 2012

Мне нужно перенести данные (varbinary (max)) из одной таблицы в другую.При выполнении обновления для этого я получаю следующую ошибку

Msg 511, Level 16, State 1, Line 18
Cannot create a row of size 8078 which is greater than the allowable
 maximum row size of 8060.

Это обновление, которое я использовал для копирования из таблицы DocumentPublication в DocumentVersion

UPDATE docver SET RecapRTF = CAST(RTFPublication as VARBINARY(MAX)) FROM
DocumentVersion docver INNER JOIN DocumentPublication docpub 
ON docpub.IdDocumentVersion = DOCVER.id

или без приведения

UPDATE docver SET RecapRTF = RTFPublication FROM
DocumentVersion docver INNER JOIN DocumentPublication docpub  
ON docpub.IdDocumentVersion = DOCVER.id

Выполняя обновление строки за строкой, я изолировал строку, которая выдает ошибку.Странно то, что данные в этом поле занимают всего 3950 байт, а другие строки с меньшим или большим количеством (например, 2000 байт или 20 МБ) работают нормально.

Затем я воссоздал таблицу назначения под другим именем итеперь он может копировать поле varbinary!?!?

Версия SQL Server 2008 R2 с последними обновлениями и база данных с совместимостью 100 (SQL Server 2008).Я запустил DBCC CHECKDB и DBCC CHECKALLOC и не нашел ошибок.

Есть какие-нибудь подсказки, что здесь может быть не так?

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Ваша таблица docver, вероятно, содержит удаленный или измененный столбец, все еще занимающий место.

См. Почему я должен перестраивать таблицу после удаления или добавления столбца?

2 голосов
/ 07 июля 2012

Только чтобы тебе не приходилось искать это ...

ALTER TABLE [docver] REBUILD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...