4

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

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

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

附带说明一下,如果我使列更具限制性,为什么 SQL Server 会关心?数据不包含空值,我不会更改数据类型或列的大小。这种类型的更改将如何破坏依赖视图、索引或统计信息?我确信有我没有看到的合理推理,但我想要一个例子。

4

2 回答 2

0

只是想; 如果您先设置默认值,它会起作用吗?(不要自己检查sintax)

ALTER TABLE Project
ADD CONSTRAINT col_sn_def
DEFAULT '' FOR StoreNumber;
GO
于 2013-08-17T03:05:37.973 回答
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

于 2015-11-21T03:05:04.397 回答