回答:
ALTER TABLE [Employee]
ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL
NOT NULL
を持つ場合、クエリで言及する必要があることも重要NULL
です。それ以外の場合は、デフォルトで設定されます。 ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL
ALTER COLUMN
属性NOT NULL
を指定せずに実行すると、列がnull可能でない場合はnullに変更されます。したがって、最初に列がNULL可能かどうかを確認し、そうでない場合はattributeを指定する必要がありますNOT NULL
。または、次のステートメントを使用して、列のnull可能性を事前にチェックし、正しい属性でコマンドを実行することもできます。
IF COLUMNPROPERTY(OBJECT_ID('Employee', 'U'), 'Salary', 'AllowsNull')=0
ALTER TABLE [Employee]
ALTER COLUMN [Salary] NUMERIC(22,5) NOT NULL
ELSE
ALTER TABLE [Employee]
ALTER COLUMN [Salary] NUMERIC(22,5) NULL
興味深いアプローチはここにあります:ダウンタイムなしでカラムを拡大する方法by spaghettidba
この列を「ALTER TABLE」コマンドで拡大しようとすると、SQLServerがすべての行を通過して新しいデータ型を書き込むのを待つ必要があります。
ALTER TABLE tab_name ALTER COLUMN col_name new_larger_data_type;
この不便さを克服するために、あなたのテーブルが取ることができる魔法の列拡大薬があり、それは行圧縮と呼ばれています。(...)行圧縮を使用すると、固定サイズの列は、実際のデータが適合する最小のデータ型で必要なスペースのみを使用できます。
テーブルがROW
レベルで圧縮されると、ALTER TABLE ALTER COLUMN
メタデータのみの操作になります。