我写这是对Changing data type of column in SQL Server
的跟进我之前的问题是,如果我需要删除所有索引和约束并得到解答,我确实需要删除它们。
因此,当我在这个主题上网时,我遇到了一些帖子,说最好禁用和启用索引,而不是删除并重新创建它们。
那么哪种方式更好?禁用索引是否也允许您更改列的数据类型?两者有什么区别?
删除和创建索引的声明
DROP INDEX UX_1_COMPUTATION ON dbo.Computation
ALTER TABLE dbo.Computation
ALTER COLUMN ComputationID NVARCHAR(25) not null
CREATE UNIQUE INDEX UX_1_COMPUTATION ON dbo.Computation (ComputationID);
禁用和启用索引的声明
ALTER INDEX [UX_1_COMPUTATION ] ON dbo.Computation DISABLE
ALTER TABLE dbo.Computation
ALTER COLUMN ComputationID NVARCHAR(25) not null
ALTER INDEX [UX_1_COMPUTATION ] ON dbo.Computation REBUILD;
答案 0 :(得分:6)
禁用索引是否也允许您更改列的数据类型?
它基于您选择的索引类型。禁用表上的聚簇索引时,无法修改列数据类型。如果您的索引是非聚集索引,那么您可以。
两者有什么区别?
禁用和删除索引的最大区别在于元数据和统计信息是否持久存在。如果禁用,他们是。如果掉线,他们不是。在执行任一操作之前,请确保仔细权衡您的选项,并始终可以重新创建可用的索引。
这是更好的方法吗?
在你的情况下,我建议删除并重新创建索引。