在更改列时快速删除并重新创建多个索引,视图和统计信息

时间:2013-08-16 20:31:22

标签: sql-server alter-table

我的“Project”表中有一个“StoreNumber”列,我想将其更改为“NOT NULL”。我最近清理了所有旧数据,因此没有空条目。但是,当我执行以下语句时,由于对各种视图,索引和统计信息的多个依赖性而导致其失败

ALTER TABLE [Project]
    ALTER COLUMN StoreNumber VARCHAR(9) NOT NULL
GO

删除所有这些视图/索引/统计信息然后运行alter语句然后再次重新创建所有视图/索引/统计信息的最快方法是什么?我知道我可以逐个复制掉所有的drop和create语句,但我更愿意在一个查询中生成脚本。

另外,为什么SQL Server会关注我是否使列更具限制性?数据不包含空值,我不会改变数据类型或列的大小。这种类型的更改如何打破依赖视图,索引或统计信息?我确信有合理的推理,我没有看到,但我想要一个例子。

2 个答案:

答案 0 :(得分:0)

想一想;如果先设置默认值,它会起作用吗? (亲自检查一下sintax)

ALTER TABLE Project
ADD CONSTRAINT col_sn_def
DEFAULT '' FOR StoreNumber;
GO

答案 1 :(得分:0)

以下内容将删除多个索引。请注意,最终语句不包含逗号。

DROP INDEX [index1_1] ON [schema].[table1],
           [index1_2] ON [schema].[table1],
           [index2_1] ON [schema].[table2],
           [index3_1] ON [schema].[table3],
           ...n,
           [lastIndexToDrop] ON [schema].[tableName]

Drop View看起来像这样。注意分号以终止语句。

DROP VIEW [schema].[view1], [schema].[view2];

此时我只关注我的应用程序中的索引。为了快速重新创建索引,我正在将.sql文件读入代码并在ExecuteNonQuery调用中执行它。如果我有需要考虑的视图,我会按照相同的方法从文件读取到使用ExecuteNonQuery执行的命令。

https://msdn.microsoft.com/en-us/library/ms173492.aspx

https://msdn.microsoft.com/en-us/library/ms176118.aspx