[sql-server] 기존 테이블에 NOT NULL 열 삽입

나는 시도했다 :

ALTER TABLE MY_TABLE 
ADD STAGE INT NOT NULL;

그러나 다음과 같은 오류 메시지가 표시됩니다.

ALTER TABLE은 널을 포함하거나 DEFAULT 정의가 지정된 열만 추가 할 수 있도록 허용합니다.



답변

옵션으로 처음에 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;


답변

열이 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 CONSTRAINTPavel의 nullable 열을 만든 다음 비값으로 NOT NULL채운 후 제약 조건 을 추가하는 것이 좋습니다 NULL.


답변

이것은 나를 위해 일했고, 또한 디자인 뷰에서 “빌려”, 변경-> 마우스 오른쪽 버튼 클릭-> 변경 스크립트 생성.

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"