SQL Server의 add column 문에 명명된 기본 제약 조건을 만들 수 있습니까?
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
새 열을 추가할 때 다음을 사용하고 큰 테이블에 기본값으로 사용합니다.각 행을 개별적으로 실행합니다.
ALTER TABLE dbo.[TableName] ADD [ColumnName] BIT NULL; /*null>no table rebuild*/
UPDATE rf SET rf.[ColumnName] = 0 FROM dbo.[TableName] rf WHERE rf.[ColumnName] IS NULL;
ALTER TABLE dbo.[TableName] ALTER COLUMN [ColumnName] BIT NOT NULL;
ALTER TABLE dbo.[TableName] ADD CONSTRAINT DF_[TableName]_[ColumnName] DEFAULT 0 FOR [ColumnName];
언급URL : https://stackoverflow.com/questions/3770015/can-i-create-a-named-default-constraint-in-an-add-column-statement-in-sql-server
'programing' 카테고리의 다른 글
WHERE 절(SQL Server 사용 중)에서 대소문자를 구분하는 검색 방법은 무엇입니까? (0) | 2023.04.07 |
---|---|
기존 테이블에서 열을 제거하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
WHERE 절의 컬럼에일리어스 참조 (0) | 2023.04.07 |
Common Table Expressions에 대해 중첩된 WITH 절을 만들 수 있습니까? (0) | 2023.04.07 |
SQL Server 설치 - 설치 미디어 폴더란? (0) | 2023.04.07 |