Program Tip

DEFAULT 값없이 null이 아닌 열을 추가 할 수 있습니까?

programtip 2020. 11. 24. 19:24
반응형

DEFAULT 값없이 null이 아닌 열을 추가 할 수 있습니까?


NOT NULL로 지정하는 열을 추가 할 수 있습니까? DEFAULT 값을 지정하고 싶지 않지만 MS-SQL 2005는 다음과 같이 말합니다.

ALTER TABLE은 널을 포함하거나 DEFAULT 정의가 지정되거나 추가되는 열이 ID 또는 타임 스탬프 열이거나 또는 이전 조건이 충족되지 않는 경우 테이블이 비어 있어야 추가 할 수있는 열만 추가 할 수 있습니다. 이 열의. 'test'열은 이러한 조건을 충족하지 않으므로 비어 있지 않은 테이블 'shiplist'에 추가 할 수 없습니다.

예인 경우 구문을 알려주십시오. 아니오 인 경우 이유를 지정하십시오.


아니, 할 수 없습니다.

가능하다면 SQL은 이미 존재하는 레코드에 무엇을 값으로 입력해야할지 알지 못하기 때문입니다. 테이블에 레코드가 없으면 문제없이 작동합니다.

이 작업을 수행하는 가장 간단한 방법은 기본값을 사용하여 열을 만든 다음 기본값을 제거하는 것입니다.

ALTER TABLE dbo.MyTable ADD
MyColumn text NOT NULL CONSTRAINT DF_MyTable_MyColumn DEFAULT 'defaultValue'
ALTER TABLE dbo.MyTable
DROP CONSTRAINT DF_MyTable_MyColumn

또 다른 대안은 제약 조건없이 열을 추가하고 모든 셀의 값을 채우고 제약 조건을 추가하는 것입니다.


테이블에 열을 추가하고 기존 행이 null이되지 않도록 업데이트 한 다음 "not null"제약 조건을 추가합니다.


아니요-SQL Server 는 기존 행에 어떤 값이 있어야하는지 알지 못 하기 때문에 상당히 합리적으로 거부합니다.

동시에 DEFAULT를 생성 한 다음 즉시 삭제하는 것은 쉽습니다.


이 방법을 사용하여 기본값없이 NOT NULL 열을 삽입합니다.

ALTER TABLE [Table] ADD [Column] INT NULL
GO
UPDATE [Table] SET [Column] = <default_value>
ALTER TABLE [Table] ALTER COLUMN [Column] INT NOT NULL

아니 당신은 할 수 없습니다. 그러나 기본값을 ( '')로 지정하는 것을 고려할 수 있습니다.


아니.

빈 문자열 ''(문자 유형의 경우) 또는 0 (숫자 인 경우) 등을 DEFAULT 값으로 사용하십시오.


아니요, SQL Server 또는 다른 데이터베이스 엔진은 데이터 테이블의 기존 행에 대해이 새 열을 null로 강제 설정할 수 없습니다. 그러나 NULL을 허용하지 않기 때문에 자신의 제약 조건을 준수하기 위해 기본값을 제공해야합니다. 이것은 큰 의미가 있습니다! DBE는 기존 행에 대해 널이 아닌 값에 대한 값을 외삽하지 않습니다.


@ Damien_The_Unbeliever의 의견 , 계산 된 열을 추가하고 있습니까? 질문도 대답도 그런 것을 암시하지 않았습니다. 계산 된 열의 경우 오류 상태 :

"UNIQUE 또는 PRIMARY KEY 제약 조건 만 계산 열에 만들 수 있지만 CHECK, FOREIGN KEY 및 NOT NULL 제약 조건에서는 계산 열을 유지해야합니다."

좋습니다.이 추측 게임을 계속하려면 "ALTER TABLE"단계에서 "NOT NULL"열을 추가하는 방법을 설명하는 스크립트가 있습니다.

CREATE TABLE TestInsertComputedColumn 
(
    FirstName VARCHAR(100),
    LastName CHAR(50)
);  

insert into TestInsertComputedColumn(FirstName,LastName)
     select 'v', 'gv8';
select * from TestInsertComputedColumn;

ALTER TABLE TestInsertComputedColumn 
      ADD FullName As FirstName + LastName PERSISTED NOT NULL;

select * from TestInsertComputedColumn;
--drop TABLE TestInsertComputedColumn;

참고 URL : https://stackoverflow.com/questions/3997966/can-i-add-a-not-null-column-without-default-value

반응형