SQL Server에서 테이블에 새 열이 있습니다.
ALTER TABLE t_tableName
ADD newColumn NOT NULL
기본 제약 조건을 지정하지 않고 NOT NULL을 지정하기 때문에 실패합니다. 테이블에는 기본 제약 조건이 없어야합니다.
이 문제를 해결하기 위해 기본 제약 조건으로 테이블을 만든 다음 제거 할 수 있습니다.
그러나 기본 제약 조건을이 문의 일부로 지정해야한다고 지정할 수있는 방법이없는 것이므로이를 제거하는 유일한 방법은 sys.default_constraints에서 찾는 저장 프로 시저를 사용하는 것입니다. 표.
이것은 많은 일이 일어날 수있는 작업에 약간 혼란스럽고 장황합니다. 누구든지 이것에 대한 더 나은 해결책이 있습니까?
답변
이것은 작동해야합니다 :
ALTER TABLE t_tableName
ADD newColumn VARCHAR(50)
CONSTRAINT YourContraintName DEFAULT '' NOT NULL
답변
ALTER TABLE t_tableName
ADD newColumn int NOT NULL
CONSTRAINT DF_defaultvalue DEFAULT (1)
답변
기존 답변이 다소 얇기 때문에 세부 정보를 추가하고 싶습니다 .
가장 중요한 힌트는 다음과 같습니다. 명시적인 이름없이 제약 조건을 만들면 안됩니다!
명명되지 않은 제약 조건의 가장 큰 문제 : 다양한 고객 컴퓨터에서이를 실행할 때 각기 다른 / 임의의 이름 이 표시됩니다.
모든 미래 업그레이드 스크립트는 진짜 두통이 될 것입니다 …
일반적인 조언은 다음과 같습니다.
- 이름이없는 제약은 없습니다!
- 몇 가지 명명 규칙을 사용하십시오.
DF_TableName_ColumnName
기본 제약 조건CK_TableName_ColumnName
점검 제한 조건UQ_TableName_ColumnName
독특한 제약PK_TableName
기본 키 제약 조건
일반적인 구문은
TheColumn <DataType> Nullability CONSTRAINT ConstraintName <ConstraintType> <ConstraintDetails>
여기에 이것을보십시오
각 열에 제약 조건을 더 추가 할 수 있으며 쉼표 뒤에 열을 추가하는 것처럼 추가 제약 조건을 추가 할 수 있습니다.
CREATE TABLE dbo.SomeOtherTable(TheIdThere INT NOT NULL CONSTRAINT PK_SomeOtherTable PRIMARY KEY)
GO
CREATE TABLE dbo.TestTable
(
--define the primary key
ID INT IDENTITY NOT NULL CONSTRAINT PK_TestTable PRIMARY KEY
--let the string be unique (results in a unique index implicitly)
,SomeUniqueString VARCHAR(100) NOT NULL CONSTRAINT UQ_TestTable_SomeUniqueString UNIQUE
--define two constraints, one for a default value and one for a value check
,SomeNumber INT NULL CONSTRAINT DF_TestTable_SomeNumber DEFAULT (0)
CONSTRAINT CK_TestTable_SomeNumber_gt100 CHECK(SomeNumber>100)
--add a foreign key constraint
,SomeFK INT NOT NULL CONSTRAINT FK_TestTable_SomeFK FOREIGN KEY REFERENCES dbo.SomeOtherTable(TheIdThere)
--add a constraint for two columns separately
,CONSTRAINT UQ_TestTable_StringAndNumber UNIQUE(SomeFK,SomeNumber)
);
GO
-일부 데이터 삽입
INSERT INTO dbo.SomeOtherTable VALUES(1);
INSERT INTO dbo.TestTable(SomeUniqueString,SomeNumber,SomeFK) VALUES('hello',111,1);
GO
INSERT INTO dbo.TestTable(SomeUniqueString,SomeNumber,SomeFK)
VALUES('fails due to uniqueness of 111,1',111,1);
답변
아래 스크립트처럼 시도하십시오.
ALTER TABLE DEMO_TABLE
ADD Column1 INT CONSTRAINT Def_Column1 DEFAULT(3) NOT NULL,
Column2 VARCHAR(10) CONSTRAINT Def_Column2 DEFAULT('New') NOT NULL;
GO
답변
