私が試してみました:
ALTER TABLE MY_TABLE
ADD STAGE INT NOT NULL;
ただし、次のエラーメッセージが表示されます。
ALTER TABLEでは、nullを含むか、DEFAULT定義を指定できる列のみを追加できます
オプションとして、最初にヌル可能列を作成してから、有効な非ヌル値でテーブル列を更新し、最後にALTER列で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;
列をNullにできない場合は、既存の行にデータを入力するデフォルトを提供する必要があります。例えば.
ALTER TABLE dbo.YourTbl ADD
newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0
Enterprise Editionでは、これは メタデータのみの変更 2012年以降です
エラーメッセージは非常にわかりやすいため、試してみてください。
ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
他のSQL実装には同様の制限があります。 理由は、列を追加するにはその列の値を追加する必要があるためです(物理的でなくても論理的に)。デフォルトはNULL
です。 NULL
を許可せず、default
がない場合、値はどうなりますか?
SQL ServerはADD CONSTRAINT
をサポートしているため、null許容列を作成し、_NULL
以外の値を入力した後にNOT NULL
制約を追加するというPavelのアプローチをお勧めします。
これは私のために働いたが、デザインビューから「借りる」こともでき、変更を加える->右クリック->変更スクリプトを生成する。
BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"