2013-08-16 32 views
4

我在我的「項目」表中有一列「StoreNumber」,我想將其更改爲「NOT NULL」。我最近清理了所有的舊數據,因此沒有空條目。然而,當我執行以下語句失敗因多依賴的各種視圖,索引和統計在更改列時快速刪除和重新創建多個索引,視圖和統計信息

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

什麼是放棄所有這些視圖/索引/統計然後運行ALTER語句的最快方法,然後重新創建所有視圖/索引/統計信息?我知道我可以複製掉所有的drop並逐個創建語句,但我更願意在單個查詢中生成腳本。

在附註上,爲什麼SQL Server會在意讓我的列更具限制性?數據不包含空值,並且不會更改數據類型或列的大小。這種類型的變化如何破壞相關的視圖,索引或統計信息?我確信有沒有看到但我想要一個例子的合理推理。

回答

0

只是想着;如果你先設置一個默認值,它會工作嗎? (不要檢查sintax我自己)

ALTER TABLE Project 
ADD CONSTRAINT col_sn_def 
DEFAULT '' FOR StoreNumber; 
GO 
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 [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

相關問題