[转帖]SQL Server超过了每行的最大字节数(8060)的原因和解决办法

sql,server,超过,每行,最大,字节数,原因,解决办法 · 浏览次数 : 0

小编点评

**一、现象** 在SQL语句建表时,出现以下错误提示: ``` 警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。 ``` **二、原因** * SQL Server中记录Record是顺序存放在数据页中的,每个数据页的可存储空间最大为8096字节(8K-页头的96字节,8192-96=8096)。 * 当可变长度列的总长度超过了8096字节时,SQL Server的数据页都装不下这条记录了,导致该表中行的 INSERT 或 UPDATE 操作失败。 **三、解决方法** 1. **修改列的数据类型或长度:**将可变长度列的类型改成text,长度不超过8060字节。 2. **在绝大多数情况下,不会出现各列长度超过行限制的情况下**。如果你确实需要这种情况,可以忽略该提示,但它并不会影响正常操作。

正文

一、现象
    出现这种错误都发生在SQL语句建表时,错误提示:

    "警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。"
 
二、原因

为什么说每行的最大长度是8096字节?   

因为在SQL SERVER中,记录Record是顺序存放在数据页中的,每一个数据页的可存储空间最大为8096字节(8K-页头的96字节,8192-96=8096),而SQL Server中行是不能跨数据页的。


因此,如果你的建表语句中可变长度列的总长度超过了8096字节,就意味着SQL Server的数据页都装不下这条记录了,系统当然就会提示错误。


三、解决
    知道问题的原因了,解决办法相对就简单了!
    1、修改你建表语句中相应的列的数据类型或长度(如将nvarchar格式改成text),让可变长度列的加和小于8060。这样可以彻底避免出现上述错误发生,当然上述的错误并不是必然出现。
    2、在绝大多数情况下不会出现各列长度超过行限制的时候(这个需要根据存储的数据的情况自行判断),你也可以忽略这个提示,这并不会必然影响到你正常的操作。

文章知识点与官方知识档案匹配,可进一步学习相关知识

与[转帖]SQL Server超过了每行的最大字节数(8060)的原因和解决办法相似的内容:

[转帖]SQL Server超过了每行的最大字节数(8060)的原因和解决办法

一、现象 出现这种错误都发生在SQL语句建表时,错误提示: "警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。" 二、原因 为什么说每行的最大长度是8096字节?

[转帖]SQL Server 聚集索引和 非聚集索引 说明

https://www.cndba.cn/dave/article/4506 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。 1 聚集索引

[转帖]SQL Server 不同版本之间的 区别说明

2021-05-12 23:5062070原创SQLServer 本文链接:https://www.cndba.cn/dave/article/4527 SQL Server 数据库版本也是在不断的进行迭代。目前主流存在的版本有:SQL Server 2008、2012、2014、2016、2017

[转帖]SQL Server 体系结构中的2个主要引擎 说明

2020-03-18 16:2321450原创SQLServer 本文链接:https://www.cndba.cn/dave/article/4498 SQL Server 由两个主要引擎组成∶关系引擎(relational engine)和存储引擎(storage engine)。 1 关系引擎

[转帖]SQL Server 内部数据库版本 及兼容表

2022-04-20 09:043100转载SQLServer Microsoft SQL Server 的较新版本创建的数据库无法附加或还原到较早的版本。之所以存在此限制,是因为较旧的版本不知道新版本中引入的文件格式有哪些变更。 如果你尝试将数据库附加到早期版本、或者还原到早期版本,将会收到 SQ

[转帖]Sql Server中通过sql命令获取cpu占用及产生锁的sql

https://www.jb51.net/article/266255.htm 这篇文章主要介绍了Sql Server中通过sql命令获取cpu占用及产生锁的sql,需要的朋友可以参考下 获取SQLSERVER中产生锁的SQL语句 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1

[转帖]sql server 2016不能全部用到CPU的逻辑核心数的问题

https://blog.csdn.net/u011966339/article/details/122969685 最近在工作中遇到了,sql server 2016 不能把CPU 的核心全部用到的问题.通过分析工具看到 总共CPU核心有72核,但sql 只能用到40核心,想信也有很多人遇到这问题

[转帖]SQL Server各版本序列号/激活码/License/秘钥

https://www.cnblogs.com/cqpanda/p/16184853.html SQL Server 2019# Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8GEnterprise Core:2C9JR-K3RNG-QD4M4-JQ2HR-8468J

[转帖]SQL Server 2022 正式发布,支持 Azure 最多的 SQL Server 版本!

https://www.modb.pro/db/559467 SQLSERVER 最新版 2022年11月16日,我们宣布正式发布 SQL Server 2022,这是迄今为止支持 Azure 最多的 SQL Server 版本,并在性能、安全性和可用性方面不断创新。这标志着 SQL Server

[转帖]Sql Server 创建临时表

https://cdn.modb.pro/db/513973 创建临时表 方法一: create table #临时表名(字段1 约束条件,字段2 约束条件,.....) create table ##临时表名(字段1 约束条件,字段2 约束条件,.....) 方法二: select * into