我正在使用以下查询更改具有大约 1 亿条记录的表的列数据类型:
ALTER TABLE dbo.TARGETTABLE
ALTER COLUMN XXX_DATE DATE
当我从有效数据源插入原始日期时,列值的日期格式正确。
但是,查询已经运行了很长时间,即使我尝试取消查询,它似乎也需要很长时间。
谁能解释执行 ALTER TABLE STATEMENT 时 SQL Server 幕后发生的事情以及为什么需要这些资源?
我正在使用以下查询更改具有大约 1 亿条记录的表的列数据类型:
ALTER TABLE dbo.TARGETTABLE
ALTER COLUMN XXX_DATE DATE
当我从有效数据源插入原始日期时,列值的日期格式正确。
但是,查询已经运行了很长时间,即使我尝试取消查询,它似乎也需要很长时间。
谁能解释执行 ALTER TABLE STATEMENT 时 SQL Server 幕后发生的事情以及为什么需要这些资源?
执行此操作的另一种方法如下:
然后在一个事务中执行以下操作:
请注意,如果您在此字段上有索引,则需要在删除旧列之前删除它,并在重命名新列之后创建 if。
有很多变量会使这些 Alter 语句多次通过您的表并大量使用 TempDB,并且根据 TempDB 的效率,它可能会非常慢。
示例包括您要更改的列是否在索引中(尤其是聚集索引,因为非聚集键带有聚集索引)。
而不是改变表......我会给你一个简单的例子......所以你可以试试这个......
主要的原因是....更改数据类型将需要大量的数据传输和数据页对齐....