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

时间:2019-07-17 04:37:52

标签: sql-server database database-schema ddl alter-column

我正在使用以下查询更改具有约1亿条记录的表的列数据类型:

ALTER TABLE dbo.TARGETTABLE
ALTER COLUMN XXX_DATE DATE

当我从有效数据源插入原始日期时,列值采用正确的日期格式。

但是,查询已经运行了很长时间,即使我试图取消查询,它似乎也要花很长时间。

有人可以解释执行ALTER TABLE STATEMENT时SQL Server幕后发生的情况吗?为什么需要这种资源?

2 个答案:

答案 0 :(得分:2)

执行此操作的另一种方法是:

  1. 在表中添加新列-[_date]日期
  2. 使用batch update,您可以更改将值从旧列转移到新列,而不会阻塞其他用户的表。

然后在一项交易中执行以下操作:

  1. 更新完成后插入的所有新值
  2. 删除旧列
  3. 重命名新列

请注意,如果您在此字段上有索引,则需要先删除它,然后再删除旧列,并在重命名新列之后再创建。

答案 1 :(得分:1)

  

有很多变量会使这些Alter语句   多次通过表并大量使用TempDB   并取决于TempDB的效率,可能会很慢。
  示例包括您要更改的列是否在   索引(特别是聚集索引,因为非聚集键带有   聚类索引)。

而不是更改表格...我会给您一个简单的例子...以便您可以尝试一下。...

  1. 假设您的表名为tblTarget1
  2. 创建具有相同结构的另一个表(tblTarget2)...
  3. 更改tblTarget2 .....的数据类型。
  4. 使用“插入查询”将数据从tblTarget1复制到tblTarget2。...
  5. 删除原始表(tblTarget1)
  6. 将tblTarget2重命名为tblTarget1

主要原因是....更改数据类型将需要大量数据传输和数据页面对齐。...

For more Information you can follow this Link