sql server 2008,想在某个表里新增一列,但是失败了。
新增列语句:altertable表名add列名floatdefault0withvalues。报错提示:警告:已经创建表'xxxx',但是它的最大行大小超过了允许的最大字...
新增列语句:alter table 表名 add 列名 float default 0 with values。
报错提示:
警告: 已经创建表 'xxxx',但是它的最大行大小超过了允许的最大字节数 8060。如果得到的行超过此大小限制,则对此表的 INSERT 或 UPDATE 操作将失败。
消息 511,级别 16,状态 1,第 1 行
不能创建大小为 8066 的行,该大小大于所允许的最大行大小 8060。
语句已终止。 展开
报错提示:
警告: 已经创建表 'xxxx',但是它的最大行大小超过了允许的最大字节数 8060。如果得到的行超过此大小限制,则对此表的 INSERT 或 UPDATE 操作将失败。
消息 511,级别 16,状态 1,第 1 行
不能创建大小为 8066 的行,该大小大于所允许的最大行大小 8060。
语句已终止。 展开
1个回答
展开全部
因为在SQL SERVER中,记录Record是顺序存放在数据页中的,每一个数据页的可存储空间最大为8096字节(8K-页头的96字节,8192-96=8096),而SQL Server中行是不能跨数据页的。
因此,如果你的建表语句中可变长度列的总长度超过了8096字节,就意味着SQL Server的数据页都装不下这条记录了,系统当然就会提示错误。
解决办法
1、修改你建表语句中相应的列的数据类型或长度(如将nvarchar格式改成text),让可变长度列的加和小于8060。这样可以彻底避免出现上述错误发生,当然上述的错误并不是必然出现。
2、在绝大多数情况下不会出现各列长度超过行限制的时候(这个需要根据存储的数据的情况自行判断),你也可以忽略这个提示,这并不会必然影响到你正常的操作。
因此,如果你的建表语句中可变长度列的总长度超过了8096字节,就意味着SQL Server的数据页都装不下这条记录了,系统当然就会提示错误。
解决办法
1、修改你建表语句中相应的列的数据类型或长度(如将nvarchar格式改成text),让可变长度列的加和小于8060。这样可以彻底避免出现上述错误发生,当然上述的错误并不是必然出现。
2、在绝大多数情况下不会出现各列长度超过行限制的时候(这个需要根据存储的数据的情况自行判断),你也可以忽略这个提示,这并不会必然影响到你正常的操作。
追问
总共1000列的float,1列的nvarchar(1000),加起来也就6000字节,没算错吧,也没超过8096啊
追答
float的精度是-1.79e-308到1.79e+308
占用8个字节,1000个已经8000了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询