回答:
オプションとして、最初にNULL可能列を作成し、次に有効な非NULL値でテーブル列を更新し、最後に列を変更してNOT NULL制約を設定できます。
ALTER TABLE MY_TABLE ADD STAGE INT NULL
GO
UPDATE MY_TABLE SET <a valid not null values for your column>
GO
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL
GO
別のオプションは、列に正しいデフォルト値を指定することです:
ALTER TABLE MY_TABLE ADD STAGE INT NOT NULL DEFAULT '0'
UPD:上記の回答GO
には、Microsoft SQLサーバーでこのコードを実行する際に必須であるものが含まれていることに注意してください。OracleまたはMySQLで同じ操作を実行する場合は、;
そのようなセミコロンを使用する必要があります。
ALTER TABLE MY_TABLE ADD STAGE INT NULL;
UPDATE MY_TABLE SET <a valid not null values for your column>;
ALTER TABLE MY_TABLE ALTER COLUMN STAGE INT NOT NULL;
update
あなたが言及する危険なステートメントはどんなクエリでも有害です。update
ここのステートメントに追加の列があるかどうかを確認するのに十分簡単なはずです。通常は、一度に1列または2列だけを追加します。update
この例では、たまたまそこに属していない余分な列をステートメントに追加した場合、最初からデータを担当するべきではありません。
ALTER COLUMN
は、SQLiteではサポートされていないことに注意してください。
GO
たことはありませんが、SQL仕様の一部ではないようです。そのため、それをサポートするツールのいずれかで実行されていないスクリプトが失敗する可能性があります。セミコロンを使用するだけですか?Microsoftの標準を普及させることはお勧めしません。確立された合理的な標準をほとんど気にしないためですが、独自に発明するためだけに独自の標準を発明します。それとは別に、役立つ答え。
列をNullにしない場合は、既存の行にデータを設定するためのデフォルトを提供する必要があります。例えば
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Enterprise Editionでは、これは2012年以降のメタデータのみの変更です
他のSQL実装にも同様の制限があります。その理由は、列を追加するには、その列に値を追加する必要があるためです(物理的にではなくても、論理的に)NULL
。デフォルトはです。あなたが許可しない場合はNULL
、と持っていないdefault
、するつもり値は何ですか?
SQL ServerはをサポートしているためADD CONSTRAINT
、null許容列を作成NOT NULL
し、NULL
値以外の値を入力した後に制約を追加するというPavelのアプローチをお勧めします。
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"