152

私が試してみました:

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

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

ALTER TABLE は、NULL を含むことができる列、または DEFAULT 定義が指定されている列のみを追加できます。

4

8 に答える 8

269

オプションとして、最初に Null 許容列を作成してから、有効な非 null 値でテーブル列を更新し、最後に 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'

GOUPD: 上記の回答には、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;
于 2010-08-16T12:14:29.300 に答える
17

列をNullにしない場合は、既存の行にデータを入力するためのデフォルトを指定する必要があります。例えば

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

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

于 2010-08-16T12:15:45.033 に答える
6

エラーメッセージは非常に説明的です。試してみてください:

ALTER TABLE MyTable ADD Stage INT NOT NULL DEFAULT '-';
于 2010-08-16T12:14:41.457 に答える
4

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

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

于 2010-08-16T12:42:23.660 に答える
0
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
于 2010-08-16T12:21:21.963 に答える