在运行 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.
Run Code Online (Sandbox Code Playgroud)
该表有 75 列:
根据我的计算,nvarchar 占用 1120 个字节,其他列占用 121 个字节(不确定,但不会更多)。
这怎么会超过8060字节呢?我怎样才能摆脱这个警告?
尝试对所有列求和isnull(datalength(myColumnName), 1),但实际数据从未超过 600。
发现了类似的问题,但更改跟踪对我来说已关闭,因此没有帮助。在这个问题中发现的 cleantable 也没有帮助。
但是,当我复制表时,新表不会产生此警告。
SELECT * INTO myNewTable FROM myTable;
-- (8561 row(s) affected)
ALTER TABLE myNewTable
ATLER COLUMN aRandomColumn NVARCHAR(10);
-- Command(s) completed successfully.
Run Code Online (Sandbox Code Playgroud)
找到了我的问题的解决方案。
这可能是由于之前的更改(特别是现有的列宽)仍然反映在底层页面结构中。尝试重建表或删除/重新创建聚集索引以回收该空间。
对我有用的是:
ALTER TABLE myTable
ADD CONSTRAINT pk_bigchange PRIMARY KEY (aColumnWithUniqueNonNullValues);
GO
ALTER TABLE myTable
DROP CONSTRAINT pk_bigchange;
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13508 次 |
| 最近记录: |