在运行 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 date
- 9 bit
- 8 int
- 5 位小数(18,5)
- 4 bigint
- 3 money
- 19 nvarchar(10)
- 10 nvarchar(20)
- 1 nvarchar(30)
- 1 nvarchar(40)
- 2 nvarchar(50)
根据我的计算,nvarchar 占用 1120 个字节,其他列占用 121 个字节(不确定,但不会更多)。
这怎么会超过8060字节呢?我怎样才能摆脱这个警告?
尝试将所有列相加isnull(datalength(myColumnName), 1)
实际数据永远不会超过600。
Found 类似的问题 https://stackoverflow.com/questions/45694198/why-does-my-row-size-exceed-the-allowed-maximum-of-8060-bytes但更改跟踪对我来说是关闭的,所以它没有帮助。也可清洁,发现于这个问题 https://stackoverflow.com/questions/18193157/maximum-row-size-of-8060-error,没有帮助。
但是,当我复制表时,新表不会产生此警告。
SELECT * INTO myNewTable FROM myTable;
-- (8561 row(s) affected)
ALTER TABLE myNewTable
ATLER COLUMN aRandomColumn NVARCHAR(10);
-- Command(s) completed successfully.
找到了我的问题的解决方案。
这个问题 https://dba.stackexchange.com/questions/74198/apparantly-errorneous-exceeds-8k-row-length-message/74202#74202处理同样的问题,并指出解决方案在另一个地方 http://sqlblog.com/blogs/kalen_delaney/archive/2006/10/13/alter-table-will-not-reclaim-space.aspx.
这可能是由于之前的更改(特别是现有列的更改)
宽度)仍然反映在底层页面结构中。尝试
重建表或删除/重新创建聚集索引
收回那个空间。
对我有用的是:
ALTER TABLE myTable
ADD CONSTRAINT pk_bigchange PRIMARY KEY (aColumnWithUniqueNonNullValues);
GO
ALTER TABLE myTable
DROP CONSTRAINT pk_bigchange;
GO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)