最大行大小超过允许的最大8060字节

时间:2018-12-03 13:32:13

标签: sql-server-2014

在运行Microsoft SQL Server 2014中。更改表后,我收到有关行大小的警告。

ALTER TABLE myTable
    ALTER COLUMN aRandomColumn NVARCHAR(10);

Warning: The table "myTable" has been created, but its maximum row size exceeds the allowed maximum of 8060 bytes. INSERT or UPDATE to this table will fail if the resulting row exceeds the size limit.

该表有75列:

  • 13个日期
  • 9位
  • 8个整数
  • 5个小数(18,5)
  • 4个bigint
  • 3钱
  • 19个nvarchar(10)
  • 10个nvarchar(20)
  • 1个nvarchar(30)
  • 1个nvarchar(40)
  • 2个nvarchar(50)

根据我的计算,nvarchars占用1120个字节,其他列121个(不确定,但不会更多)。

这如何超过8060字节?我如何摆脱这个警告?

试图对所有带有isnull(datalength(myColumnName), 1)的列求和,而实际数据永远不会超过600。

找到了a similar question,但是更改跟踪对我来说是关闭的,所以没有帮助。在this question中找到的cleantable也无济于事。

但是,当我复制表时,新表不会产生此警告。

SELECT * INTO myNewTable FROM myTable;
-- (8561 row(s) affected)
ALTER TABLE myNewTable
    ATLER COLUMN aRandomColumn NVARCHAR(10);
-- Command(s) completed successfully.

1 个答案:

答案 0 :(得分:0)

找到了解决我问题的方法。

This question处理相同的问题,并指向解决方案in another location

  

这可能是由于先前的更改(尤其是现有列的更改)   宽度)仍然反映在基础页面结构中。尝试   重建表或删除/重新创建聚簇索引到   回收空间。

对我有用的是:

ALTER TABLE myTable
    ADD CONSTRAINT pk_bigchange PRIMARY KEY (aColumnWithUniqueNonNullValues);
GO
ALTER TABLE myTable
    DROP CONSTRAINT pk_bigchange;
GO