当前位置: 首页 > 面试题库 >

复制varbinary(max)字段时超出最大行大小

邢鸿博
2023-03-14
问题内容

我需要将数据(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,但未发现错误。

关于这里可能出什么问题的任何线索吗?


问题答案:

您的docver表可能具有删除或更改的列,但仍在占用空间。

请参阅为什么在删除或添加列后重新构建表?



 类似资料:
  • max 获得数据表中,值最大的max($table, $column, $where) table [string] 表名. column [string] 查询的字段列. where (optional) [array] WHERE 条件.max($table, $join, $column, $where) table [string] 表名. join [array] 多表查询. colum

  • max 获得数据表中,值最大的max($table, $column, $where) table [string] 表名. column [string] 查询的字段列. where (optional) [array] WHERE 条件.max($table, $join, $column, $where) table [string] 表名. join [array] 多表查询. colum

  • 我有js函数来寻找2d数组中的最小值和最大值,它在小数组中工作正常,但是当我把它传递给大数组时,它给我< code>range error: 超出了最大调用堆栈大小。 我用的是最新版本的Chrome。

  • 具有值的表 在存储过程中,我想从表中选择值,然后将其转换为var二进制最大值。我选择: 但是我得到一个错误: 不允许从数据类型varchar隐式转换为var二进制(max)。使用CONVERT函数运行此查询。 请帮我解决这个问题

  • 在我工作的地方,我们正在使用CA的Siteminder为我们的应用程序实现单一登录。我们遇到了用户在看似随机的时间后甚至在工作时“超时”的问题。 花了我们一段时间,但我们终于弄清楚了。Siteminder有一个名为“最大超时”的设置,它基本上会导致用户的会话在两小时后无效...... 我一辈子都搞不明白你到底用它干什么? 有什么想法吗?

  • 我的想法是在达到最大字符限制时,将错误设置为编辑文本。是否有关于此事件的回调,或者是否有其他方法可以实现此效果?提前谢谢。