web-dev-qa-db-ja.com

既存のテーブルにNOT NULL列を挿入します

私が試してみました:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

ただし、次のエラーメッセージが表示されます。

ALTER TABLEでは、nullを含むか、DEFAULT定義を指定できる列のみを追加できます

104
ANP

オプションとして、最初にヌル可能列を作成してから、有効な非ヌル値でテーブル列を更新し、最後に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;
194

列をNullにできない場合は、既存の行にデータを入力するデフォルトを提供する必要があります。例えば.

ALTER TABLE dbo.YourTbl ADD
    newcol int NOT NULL CONSTRAINT DF_YourTbl_newcol DEFAULT 0

Enterprise Editionでは、これは メタデータのみの変更 2012年以降です

12
Martin Smith

エラーメッセージは非常にわかりやすいため、試してみてください。

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
5
a'r

他のSQL実装には同様の制限があります。 理由は、列を追加するにはその列の値を追加する必要があるためです(物理的でなくても論理的に)。デフォルトはNULLです。 NULLを許可せず、defaultがない場合、値はどうなりますか?

SQL ServerはADD CONSTRAINTをサポートしているため、null許容列を作成し、_NULL以外の値を入力した後にNOT NULL制約を追加するというPavelのアプローチをお勧めします。

3
dan04

これは私のために働いたが、デザインビューから「借りる」こともでき、変更を加える->右クリック->変更スクリプトを生成する。

BEGIN TRANSACTION
GO
ALTER TABLE dbo.YOURTABLE ADD
    YOURCOLUMN bit NOT NULL CONSTRAINT DF_YOURTABLE_YOURCOLUMN DEFAULT 0
GO
COMMIT
2
pabbie
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
1
ajoejoseph
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"
0
AKronis1369