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。
语句已终止。
展开
 我来答
情又独中
2017-01-11 · TA获得超过1032个赞
知道小有建树答主
回答量:1220
采纳率:100%
帮助的人:830万
展开全部
因为在SQL SERVER中,记录Record是顺序存放在数据页中的,每一个数据页的可存储空间最大为8096字节(8K-页头的96字节,8192-96=8096),而SQL Server中行是不能跨数据页的。

因此,如果你的建表语句中可变长度列的总长度超过了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了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式