답변:
옵션으로 처음에 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'
UPD : 위의 답변에는 GOMicrosoft 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여기 문에 추가 열이 있는지 확인하는 것은 간단해야합니다 . 일반적으로 한 번에 한 두 개의 열만 추가합니다. 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 CONSTRAINTPavel의 nullable 열을 만든 다음 비값으로 NOT NULL채운 후 제약 조건 을 추가하는 것이 좋습니다 NULL.
ALTER TABLE `MY_TABLE` ADD COLUMN `STAGE` INTEGER UNSIGNED NOT NULL AFTER `PREV_COLUMN`;
Alter TABLE 'TARGET' add 'ShouldAddColumn' Integer Not Null default "0"