我需要将数据(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字节或20MB)的工作正常。
然后我以不同的名称重新创建了目标表,现在它可以复制varbinary字段了!?!?
SQL Server版本是2008 R2,具有最新的更新和具有兼容性的数据库100(sql server 2008)。我运行了DBCC CHECKDB和DBCC CHECKALLOC,但没有发现错误。
这里可能有什么问题的线索?
答案 0 :(得分:4)
您的docver
表可能有一个丢弃或更改的列仍占用空间。
请参阅Why should I rebuild a table after dropping or adding a column?
答案 1 :(得分:2)
这样你就不用去查找......
ALTER TABLE [docver] REBUILD