我的“Project”表中有一个“StoreNumber”列,我想将其更改为“NOT NULL”。我最近清理了所有旧数据,因此没有空条目。但是,当我执行以下语句时,由于对各种视图,索引和统计信息的多个依赖性而导致其失败
ALTER TABLE [Project]
ALTER COLUMN StoreNumber VARCHAR(9) NOT NULL
GO
删除所有这些视图/索引/统计信息然后运行alter语句然后再次重新创建所有视图/索引/统计信息的最快方法是什么?我知道我可以逐个复制掉所有的drop和create语句,但我更愿意在一个查询中生成脚本。
另外,为什么SQL Server会关注我是否使列更具限制性?数据不包含空值,我不会改变数据类型或列的大小。这种类型的更改如何打破依赖视图,索引或统计信息?我确信有合理的推理,我没有看到,但我想要一个例子。
答案 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执行的命令。