sql-server-2008 - SQL Server : Double data size of a table when altering column type

标签 sql-server-2008 alter-column

我将列的类型更改为实际较小的类型:

-- change type from nvarchar(100) to varchar(50)
Alter Table [MyTable] Alter column [MyColumn] varchar(50) 

该表包含 4 个 Mio。记录。之前它使用了大约 1.1 GB 的空间,在更改列之后,它使用了 2.2 GB 的空间。有什么解释吗?

我通过 SMO 或通过查看 sql server management studio 中的表属性找到它使用的空间:“MyTable -> Properties -> Storage -> Data space”。现在我怀疑这就是数据实际使用的空间。

最佳答案

运行ALTER INDEX ALL On MyTable REBUILD,然后使用“true”标志再次检查空间

基本上,类型的更改以某种方式导致存储碎片化:例如,它现在可以为 NULL,而以前则不会,这会影响磁盘上的结构。我选择这个示例是因为您没有在 ALTER TABLE 中指定 NULL/NOT NULL

关于sql-server-2008 - SQL Server : Double data size of a table when altering column type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6289016/

相关文章:

sql-server - 当增加大表上 VARCHAR 列的大小时会出现任何问题吗?

sql - HSQLDB(HyperSQL): Changing column type in a TEXT table

javascript - 在没有回发的情况下在表/ GridView 中查看/预览上传的文件

sql-server - 在存储过程中创建唯一 ID 以匹配旧数据

sql-server - 在 ADO.NET + SQL Server DateTime 列的生命周期中如何处理时区?

sql-server - 当索引依赖于该列而不重新创建索引时,如何将列从 null 更改为 not null?

SQL SET DEFAULT 在 MS Access 中不起作用

sql-server - SQL Server 中 ALTER COLUMN 语句的幕后操作

sql - 内部联接返回冗余数据而不是预期数据

c# - 成功删除记录时 ExecuteNonQuery 返回值 0