programing

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

stoneblock 2023. 4. 9. 21:02

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

NOT NULL로 지정한 컬럼을 추가할 수 있습니까?기본값은 지정하지 않지만 MS-SQL 2005는 다음과 같이 표시됩니다.

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

YES의 경우 구문을 알려주시고, No의 경우 이유를 명시해 주십시오.

아니, 그럴 수 없다.

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(숫자의 경우) 등의 디폴트 값

아니, 너는 할 수 없어.단, 디폴트값을 ('')로 지정하는 것을 고려할 수 있습니다.

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

@데미엔_The_Unbeliever's comment, 계산 컬럼을 추가하고 있습니까?질문도 대답도 그런 의미는 없었다.계산된 열의 경우 오류 상태는 다음과 같습니다.

"계산된 열에는 고유 키 또는 기본 키 제약 조건만 생성할 수 있지만 CHECK, FORENAL 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;

아래 방법을 사용했는데 효과가 있었습니다.

Syntax:
ALTER TABLE <YourTable> ADD <NewColumn> <NewColumnType> NOT NULL DEFAULT <DefaultValue>

Example:
ALTER TABLE Tablename ADD ColumnName datetime NOT NULL DEFAULT GETDATE();

옵션으로 처음에 Null-able 열을 작성한 후 테이블 열을 유효한 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

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