4

「Project」テーブルに「NOT NULL」に変更したい列「StoreNumber」があります。最近、古いデータをすべてサニタイズして、null エントリがないようにしました。ただし、次のステートメントを実行すると、さまざまなビュー、インデックス、および統計への複数の依存関係が原因で失敗します

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

これらのビュー/インデックス/統計をすべて削除してから、alter ステートメントを実行し、すべてのビュー/インデックス/統計を再度作成する最も速い方法は何ですか? すべての drop ステートメントと create ステートメントを 1 つずつコピーできることはわかっていますが、1 つのクエリでスクリプトを生成したいと考えています。

余談ですが、列をより制限している場合、SQL Server が気にするのはなぜですか? データにはヌルが含まれておらず、データ型や列のサイズを変更していません。この種の変更は、依存するビュー、インデックス、または統計をどのように壊しますか? 私が見ていない正当な理由があると確信していますが、例が欲しいです。

4

2 に答える 2

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

于 2015-11-21T03:05:04.397 に答える
0

考えてただけ; 最初にデフォルト値を設定すると機能しますか? (シンタックスを自分でチェックしないでください)

ALTER TABLE Project
ADD CONSTRAINT col_sn_def
DEFAULT '' FOR StoreNumber;
GO
于 2013-08-17T03:05:37.973 に答える