- database_name
테이블이 생성된 데이터베이스의 이름입니다. database_name은 기존 데이터베이스 이름을 지정해야 합니다. database_name을 지정하지 않으면 기본적으로 현재 데이터베이스가 됩니다. 현재 연결에 대한 로그인은 database_name에 지정된 데이터베이스의 기존 사용자 ID와 연결되어야 하며 해당 사용자 ID는 CREATE TABLE 권한을 갖고 있어야 합니다.
- schema_name
새 테이블이 속한 스키마의 이름입니다.
- table_name
새 테이블의 이름입니다. 테이블 이름은 식별자에 적용되는 규칙을 따라야 합니다. 로컬 임시 테이블 이름(단일 숫자 기호(#)가 접두사로 붙은 이름이며 최대 116자)을 제외하면 table_name은 최대 128자가 될 수 있습니다.
- AS FileTable
새 테이블을 FileTable로 만듭니다. FileTable에는 고정 스키마가 있으므로 열을 지정하지 않아도 됩니다. FileTable에 대한 자세한 내용은 FileTable(SQL Server)을 참조하십시오.
- column_name
테이블에 있는 열 이름입니다. 열 이름은 식별자에 적용되는 규칙을 따라야 하며 테이블에서 고유해야 합니다. column_name은 최대 128자까지 지정할 수 있습니다. timestamp 데이터 형식으로 생성된 열에는 column_name을 생략할 수 있습니다. column_name을 지정하지 않으면 timestamp 열의 이름은 기본적으로 timestamp가 됩니다.
- computed_column_expression
계산 열의 값을 정의하는 식입니다. 계산 열은 해당 열에 PERSISTED 표시가 없는 한 테이블에 물리적으로 저장되지 않는 가상의 열입니다. 이 열은 같은 테이블의 다른 열을 사용하는 식에서 계산됩니다. 예를 들어 계산 열은 cost AS price * qty와 같은 정의를 가질 수 있습니다. 식은 계산되지 않은 열 이름, 상수, 함수, 변수 및 이러한 요소를 하나 이상의 연산자로 연결한 조합이 될 수 있습니다. 식은 하위 쿼리가 되거나 별칭 데이터 형식을 포함할 수 없습니다.
계산 열은 SELECT 목록, WHERE 절, ORDER BY 절 또는 정규식을 사용할 수 있는 다른 위치에서 사용할 수 있습니다. 단, 다음과 같은 경우는 예외입니다.
계산 열은 DEFAULT 또는 FOREIGN KEY 제약 조건 정의로 사용하거나 NOT NULL 제약 조건 정의와 함께 사용할 수 없습니다. 그러나 계산 열 값이 결정적 식에 의해 정의되고 결과의 데이터 형식이 인덱스 열에 허용되는 경우에는 계산 열을 인덱스의 키 열이나 PRIMARY KEY 또는 UNIQUE 제약 조건의 일부로 사용할 수 있습니다.
예를 들어 테이블에 a와 b라는 정수 열이 있을 때 계산 열 a+b는 인덱싱할 수 있지만 계산 열 a+DATEPART(dd, GETDATE())는 다음 호출 시 값이 바뀌므로 인덱싱할 수 없습니다.
계산 열은 INSERT 또는 UPDATE 문의 대상이 될 수 없습니다.
참고 |
|---|
테이블의 각 행은 계산 열과 연관된 열에 대해 다른 값을 가질 수 있습니다. 따라서 계산 열은 각 행에 대해 동일한 값을 갖지 않습니다. |
계산 열의 Null 허용 여부는 사용되는 식을 바탕으로 데이터베이스 엔진에서 자동으로 결정합니다. 대부분 식의 결과는 언더플로 또는 오버플로에 의한 Null 결과를 생성할 수 있으므로 Null이 허용되지 않는 열만 사용하더라도 결국 식은 Null을 허용하는 것으로 간주됩니다. AllowsNull 속성과 함께 COLUMNPROPERTY 함수를 사용하여 테이블에 있는 계산 열의 Null 허용 여부를 확인합니다. Null을 허용하는 식은 check_expression 상수로 ISNULL을 지정하여 Null을 허용하지 않는 식으로 바꿀 수 있습니다. 이때 이 상수는 NULL 결과를 대체하는 Null이 아닌 값입니다. CLR(공용 언어 런타임) 사용자 정의 형식의 식을 바탕으로 한 계산 열에는 해당 형식에 대한 REFERENCES 권한이 필요합니다.
- PERSISTED
SQL Server 데이터베이스 엔진이 계산된 값을 테이블에 물리적으로 저장하고 계산 열이 사용하는 다른 열이 업데이트되면 해당 값을 업데이트하도록 지정합니다. 계산 열을 PERSISTED로 표시하면 결정적이지만 정확하지는 않은 계산 열에 인덱스를 만들 수 있습니다. 자세한 내용은 계산 열의 인덱스를 참조하십시오. 분할된 테이블의 분할 열로 사용되는 계산 열은 명시적으로 PERSISTED로 표시해야 합니다. PERSISTED를 지정할 때 computed_column_expression은 결정적이어야 합니다.
- ON { <partition_scheme> | filegroup | "default" }
테이블이 저장된 파티션 구성표 또는 파일 그룹을 지정합니다. <partition_scheme>을 지정하면 해당 테이블은 <partition_scheme>에 지정된 하나 이상의 파일 그룹 집합에 파티션이 저장되는 분할된 테이블이 됩니다. filegroup을 지정한 경우에는 테이블이 명명된 파일 그룹에 저장됩니다. 파일 그룹은 데이터베이스 내에 있어야 합니다. "default"를 지정하거나 ON을 전혀 지정하지 않으면 기본 파일 그룹에 테이블이 저장됩니다. CREATE TABLE에 지정된 테이블의 저장 메커니즘은 곧이어 변경할 수 없습니다.
ON {<partition_scheme> | filegroup | "default"}는 PRIMARY KEY나 UNIQUE 제약 조건에도 지정할 수 있습니다. 이러한 제약 조건은 인덱스를 만듭니다. filegroup을 지정한 경우에는 인덱스가 명명된 파일 그룹에 저장됩니다. "default"를 지정하거나 ON을 전혀 지정하지 않으면 테이블과 동일한 파일 그룹에 인덱스가 저장됩니다. PRIMARY KEY 또는 UNIQUE 제약 조건이 클러스터형 인덱스를 만드는 경우에는 테이블에 대한 데이터 페이지가 인덱스와 동일한 파일 그룹에 저장됩니다. CLUSTERED를 지정하거나 아니면 제약 조건이 클러스터형 인덱스를 만들고 테이블 정의의 <partition_scheme> 또는 filegroup과는 다르게 <partition_scheme>을 지정하거나 그 반대인 경우에는 제약 조건 정의만 유지하고 나머지는 무시합니다.
참고 |
|---|
이 컨텍스트에서 default는 키워드가 아니라 기본 파일 그룹에 대한 식별자이며 ON "default" 또는 ON [default]와 같이 구분되어야 합니다. "default"를 지정하면 현재 세션의 QUOTED_IDENTIFIER 옵션이 ON이어야 합니다. 이 값은 기본 설정입니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하십시오. |
참고 |
|---|
분할된 테이블을 만든 후에는 테이블의 LOCK_ESCALATION 옵션을 AUTO로 설정하십시오. 이렇게 하면 테이블 수준이 아닌 파티션(HoBT) 수준으로 잠금이 에스컬레이션되도록 하여 동시성을 향상시킬 수 있습니다. 자세한 내용은 ALTER TABLE(Transact-SQL)을 참조하십시오. |
- TEXTIMAGE_ON { filegroup| "default" }
지정된 파일 그룹에 text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) 및 CLR 사용자 정의 형식 열(기하 도형 및 지리 포함)이 저장되어 있음을 나타냅니다.
테이블에 큰 값 열이 없는 경우에는 TEXTIMAGE_ON이 허용되지 않습니다. <partition_scheme>을 지정하면 TEXTIMAGE_ON을 지정할 수 없습니다. "default"를 지정하거나 TEXTIMAGE_ON을 전혀 지정하지 않으면 큰 값 열이 기본 파일 그룹에 저장됩니다. CREATE TABLE에 지정된 큰 값 열 데이터를 저장한 후에는 곧이어 변경할 수 없습니다.
참고 |
|---|
이 컨텍스트에서 default는 키워드가 아니라 기본 파일 그룹에 대한 식별자이며 TEXTIMAGE_ON "default" 또는 TEXTIMAGE_ON [default]와 같이 구분되어야 합니다. "default"를 지정하면 현재 세션의 QUOTED_IDENTIFIER 옵션이 ON이어야 합니다. 이 값은 기본 설정입니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하십시오. |
- FILESTREAM_ON { partition_scheme_name | filegroup | "default" }
FILESTREAM 데이터의 파일 그룹을 지정합니다.
테이블에 FILESTREAM 데이터가 포함되어 있고 테이블이 분할된 경우에는 FILESTREAM_ON 절을 포함해야 하며 이 절에서 FILESTREAM 파일 그룹의 파티션 구성표를 지정해야 합니다. 이 파티션 구성표는 테이블의 파티션 구성표와 동일한 파티션 함수 및 파티션 열을 사용해야 합니다. 그렇지 않으면 오류가 발생합니다.
테이블이 분할되지 않은 경우에는 FILESTREAM 열을 분할할 수 없습니다. 테이블의 FILESTREAM 데이터는 단일 파일 그룹에 저장되어야 합니다. 이 파일 그룹은 FILESTREAM_ON 절에 지정됩니다.
테이블이 분할되지 않고 FILESTREAM_ON 절이 지정되지 않은 경우에는 DEFAULT 속성이 설정된 FILESTREAM 파일 그룹이 사용됩니다. FILESTREAM 파일 그룹이 없으면 오류가 발생합니다.
ON 및 TEXTIMAGE_ON과 마찬가지로 FILESTREAM_ON에 대해 CREATE TABLE을 사용하여 설정한 값은 다음과 같은 경우를 제외하고 변경할 수 없습니다.
CREATE INDEX 문이 힙을 클러스터형 인덱스로 변환하는 경우. 이 경우 다른 FILESTREAM 파일 그룹, 파티션 구성표 또는 NULL을 지정할 수 있습니다.
DROP INDEX 문이 클러스터형 인덱스를 힙으로 변환하는 경우. 이 경우 다른 FILESTREAM 파일 그룹, 파티션 구성표 또는 "default"를 지정할 수 있습니다.
FILESTREAM_ON <filegroup> 절에 지정된 파일 그룹이나 파티션 구성표에 명명되어 있는 각 FILESTREAM 파일 그룹에는 파일 그룹에 대해 정의된 파일이 하나 포함되어 있어야 합니다. 이 파일은 CREATE DATABASE 또는 ALTER DATABASE 문을 사용하여 정의해야 합니다. 그러지 않으면 오류가 발생합니다.
관련 FILESTREAM 항목은 BLOB(Binary Large Object) 데이터(SQL Server)을 참조하십시오.
- [ type_schema_name. ] type_name
열의 데이터 형식과 열이 속한 스키마를 지정합니다. 데이터 형식은 다음 중 하나일 수 있습니다.
시스템 데이터 형식
SQL Server 시스템 데이터 형식을 기반으로 하는 별칭 형식. 별칭 데이터 형식은 CREATE TYPE 문으로 만들어진 다음 테이블 정의에 사용됩니다. 별칭 데이터 형식에 대한 NULL 또는 NOT NULL 할당은 CREATE TABLE 문 중에서 덮어쓸 수 있지만 길이 지정은 변경할 수 없습니다. 즉, CREATE TABLE 문에서 별칭 데이터 형식의 길이를 지정할 수 없습니다.
CLR 사용자 정의 형식. CLR 사용자 정의 데이터 형식은 CREATE TYPE 문으로 만들어진 다음 테이블 정의에서 사용됩니다. CLR 사용자 정의 형식으로 열을 만들려면 해당 형식에 대한 REFERENCES 권한이 필요합니다.
type_schema_name을 지정하지 않으면 SQL Server 데이터베이스 엔진에서는 다음 순서로 type_name을 참조합니다.
- precision
지정한 데이터 형식의 전체 자릿수입니다. 유효한 전체 자릿수 값에 대한 자세한 내용은 전체 자릿수, 소수 자릿수 및 길이(Transact-SQL)를 참조하십시오.
- scale
지정한 데이터 형식에 대한 소수 자릿수입니다. 유효한 소수 자릿수 값에 대한 자세한 내용은 전체 자릿수, 소수 자릿수 및 길이를 참조하십시오.
- max
2^31바이트의 문자와 binary 데이터 그리고 2^30바이트의 유니코드 데이터를 저장하기 위한 varchar, nvarchar 및 varbinary 데이터 형식에만 적용됩니다.
- CONTENT
column_name에 있는 xml 데이터 형식의 각 인스턴스가 여러 개의 최상위 요소를 포함할 수 있도록 지정합니다. CONTENT는 xml 데이터 형식에만 적용되며 xml_schema_collection을 지정한 경우에만 지정할 수 있습니다. 지정하지 않은 경우에는 CONTENT가 기본 동작입니다.
- DOCUMENT
column_name에 있는 xml 데이터 형식의 각 인스턴스가 최상위 요소를 하나만 포함할 수 있도록 지정합니다. DOCUMENT는 xml 데이터 형식에만 적용되며 xml_schema_collection을 지정한 경우에만 지정할 수 있습니다.
- xml_schema_collection
XML 스키마 컬렉션과의 연결을 위해 xml 데이터 형식에만 적용됩니다. 스키마에 xml 열을 입력하기 전에 먼저 CREATE XML SCHEMA COLLECTION을 사용하여 데이터베이스에서 해당 스키마를 만들어야 합니다.
- DEFAULT
삽입 중에 값이 명시적으로 지정되지 않은 경우에 열에 대해 제공되는 값을 지정합니다. DEFAULT 정의는 timestamp로 정의되거나 IDENTITY 속성이 있는 열을 제외한 모든 열에 적용할 수 있습니다. 사용자 정의 형식 열에 대해 기본값을 지정할 경우 constant_expression에서 해당 사용자 정의 형식으로 암시적으로 변환할 수 있어야 합니다. DEFAULT 정의는 테이블이 삭제될 때 제거됩니다. 문자열과 같은 상수 값, 스칼라 함수(시스템 함수, 사용자 정의 함수 또는 CLR 함수) 또는 NULL만 기본값으로 사용할 수 있습니다. 이전 버전의 SQL Server와 호환성을 유지하기 위해 DEFAULT에 제약 조건 이름을 할당할 수 있습니다.
- constant_expression
열의 기본값으로 사용되는 상수, NULL 또는 시스템 함수입니다.
- IDENTITY
새 열이 ID 열임을 나타냅니다. 테이블에 새 행이 추가되면 데이터베이스 엔진은 열에 대해 고유한 증가값을 제공합니다. ID 열은 일반적으로 PRIMARY KEY 제약 조건과 함께 사용되어 테이블에 대한 고유한 행 식별자 역할을 합니다. tinyint, smallint, int, bigint, decimal(p,0) 또는 numeric(p,0) 열에 IDENTITY 속성을 할당할 수 있습니다. ID 열은 테이블당 하나만 만들 수 있습니다. ID 열에는 바인딩된 기본값 및 DEFAULT 제약 조건을 사용할 수 없습니다. 초기값과 증가값은 둘 다 지정하거나 또는 둘 다 지정하지 않아야 합니다. 둘 다 지정하지 않은 경우에는 기본값 (1,1)이 사용됩니다.
- seed
테이블에 로드되는 첫 번째 행에 사용하는 값입니다.
- increment
로드된 이전 행의 ID 값에 추가되는 증가값입니다.
- NOT FOR REPLICATION
CREATE TABLE 문에서 IDENTITY 속성, FOREIGN KEY 제약 조건 및 CHECK 제한 조건에 대해 NOT FOR REPLICATION 절을 지정할 수 있습니다. IDENTITY 속성에 이 절을 지정하면 복제 에이전트가 삽입 작업을 수행할 때 ID 열의 값이 증가하지 않습니다. 제약 조건에 대해 이 절을 지정하면 복제 에이전트가 삽입, 업데이트 또는 삭제 작업을 수행할 때 해당 제약 조건이 강제로 적용되지 않습니다.
- ROWGUIDCOL
새 열이 행 GUID 열임을 나타냅니다. 테이블당 한 개의 uniqueidentifier 열만 ROWGUIDCOL 열로 지정할 수 있으며 ROWGUIDCOL 속성을 적용하면 $ROWGUID를 사용하여 열을 참조할 수 있습니다. ROWGUIDCOL 속성은 uniqueidentifier 열에만 할당할 수 있습니다. 사용자 정의 데이터 형식 열은 ROWGUIDCOL로 지정할 수 없습니다.
ROWGUIDCOL 속성은 열에 저장된 값이 고유하도록 강제 적용하지 않습니다. 또한 테이블에 삽입된 새 행에 대한 값을 자동으로 생성하지도 않습니다. 각 열에 고유한 값을 생성하려면 INSERT 문에 NEWID 또는 NEWSEQUENTIALID 함수를 사용하거나 열에 대한 기본값으로 이러한 함수를 사용하십시오.
- SPARSE
열이 스파스 열임을 나타냅니다. 스파스 열의 저장소는 Null 값에 대해 최적화됩니다. 스파스 열은 NOT NULL로 지정할 수 없습니다. 추가 제한 사항 및 스파스 열에 대한 자세한 내용은 스파스 열 사용을 참조하십시오.
- FILESTREAM
varbinary(max) 열에 대해서만 사용할 수 있습니다. varbinary(max) BLOB 데이터에 대한 FILESTREAM 저장소를 지정합니다.
테이블에는 ROWGUIDCOL 특성을 갖는 uniqueidentifier 데이터 형식의 열도 있어야 합니다. 이 열은 Null 값을 허용하지 않으며 UNIQUE 또는 PRIMARY KEY 단일 열 제약 조건을 가져야 합니다. 열의 GUID 값은 응용 프로그램에서 데이터를 삽입할 때 제공하거나 NEWID () 함수를 사용하는 DEFAULT 제약 조건을 통해 제공해야 합니다.
테이블에 대해 정의된 FILESTREAM 열이 있는 동안에는 ROWGUIDCOL 열을 삭제하고 관련 제약 조건을 변경할 수 없습니다. ROWGUIDCOL 열은 마지막 FILESTREAM 열이 삭제된 이후에만 삭제될 수 있습니다.
열에 대해 FILESTREAM 저장소 특성이 지정된 경우 해당 열의 모든 값이 파일 시스템에 있는 FILESTREAM 데이터 컨테이너에 저장됩니다.
- COLLATE collation_name
열에 대한 데이터 정렬을 지정합니다. 데이터 정렬 이름으로는 Windows 데이터 정렬 이름 또는 SQL 데이터 정렬 이름을 사용할 수 있습니다. collation_name은 char, varchar, text, nchar, nvarchar 및 ntext 데이터 형식의 열에만 적용할 수 있습니다. 지정하지 않은 경우 열이 사용자 정의 데이터 형식이면 사용자 정의 데이터 형식의 데이터 정렬에 열이 할당되고 그렇지 않은 경우에는 데이터베이스의 기본 데이터 정렬에 할당됩니다.
Windows 및 SQL 데이터 정렬 이름에 대한 자세한 내용은 Windows 데이터 정렬 이름과 SQL 데이터 정렬 이름을 참조하십시오.
COLLATE 절에 대한 자세한 내용은 COLLATE(Transact-SQL)를 참조하십시오.
- CONSTRAINT
PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY 또는 CHECK 제약 조건 정의의 시작을 표시하는 선택적인 키워드입니다.
- constraint_name
제약 조건의 이름입니다. 제약 조건 이름은 테이블이 속한 스키마 내에서 고유한 이름이어야 합니다.
- NULL | NOT NULL
열의 Null 값 허용 여부를 결정합니다. NULL은 엄격하게 말해 제약 조건이 아니지만 NOT NULL처럼 지정할 수 있습니다. 계산 열에서는 PERSISTED를 지정한 경우에만 NOT NULL을 지정할 수 있습니다.
- PRIMARY KEY
지정한 열에 고유 인덱스를 통해 엔터티 무결성을 적용하는 제약 조건입니다. PRIMARY KEY 제약 조건은 각 테이블마다 하나만 만들 수 있습니다.
- UNIQUE
지정한 열에 대해 고유 인덱스를 통해 엔터티 무결성을 적용하는 제약 조건입니다. 하나의 테이블이 여러 개의 UNIQUE 제약 조건을 가질 수 있습니다.
- CLUSTERED | NONCLUSTERED
PRIMARY KEY 또는 UNIQUE 제약 조건에 대해 클러스터형 또는 비클러스터형 인덱스를 만들도록 지정합니다. PRIMARY KEY 제약 조건의 기본값은 CLUSTERED이며 UNIQUE 제약 조건의 기본값은 NONCLUSTERED입니다.
CREATE TABLE 문에서는 한 가지 제약 조건에만 CLUSTERED를 지정할 수 있습니다. UNIQUE 제약 조건에 대해 CLUSTERED를 지정하고 PRIMARY KEY 제약 조건도 지정한 경우 PRIMARY KEY의 기본값은 NONCLUSTERED입니다.
- FOREIGN KEY REFERENCES
열에 있는 데이터에 대한 참조 무결성을 제공하는 제약 조건입니다. FOREIGN KEY 제약 조건을 지정하려면 열의 각 값이 참조된 테이블의 참조된 해당 열에 있어야 합니다. FOREIGN KEY 제약 조건은 참조되는 테이블의 PRIMARY KEY 또는 UNIQUE 제약 조건 열이나 참조되는 테이블의 UNIQUE INDEX에서 참조되는 열만 참조할 수 있습니다. 계산 열의 외래 키 또한 PERSISTED로 표시되어야 합니다.
- [ schema_name.] referenced_table_name]
FOREIGN KEY 제약 조건이 참조하는 테이블과 그 테이블이 속한 스키마의 이름입니다.
- (ref_column [ ,... n ] )
FOREIGN KEY 제약 조건이 참조하는 테이블의 열 또는 열 목록입니다.
- ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
행이 참조 관계를 가지고 참조된 행이 부모 테이블에서 삭제될 경우에 테이블의 행에 수행될 동작을 지정합니다. 기본값은 NO ACTION입니다.
- NO ACTION
데이터베이스 엔진에서 오류가 발생하며 부모 테이블의 행에 대한 삭제 동작이 롤백됩니다.
- CASCADE
부모 테이블에서 행을 삭제한 경우 참조 테이블에서 해당 행이 삭제됩니다.
- SET NULL
부모 테이블에서 해당 행을 삭제하면 외래 키를 구성하는 모든 값이 NULL로 설정됩니다. 이 제약 조건을 실행하려면 외래 키 열이 Null을 허용해야 합니다.
- SET DEFAULT
부모 테이블에서 해당 행을 삭제하면 외래 키를 구성하는 모든 값이 기본값으로 설정됩니다. 이 제약 조건을 실행하려면 모든 외래 키 열에 기본값 정의가 있어야 합니다. 열이 Null을 허용하고 명시적 기본값이 설정되어 있지 않은 경우 NULL은 해당 열의 암시적 기본값이 됩니다.
논리적 레코드를 사용하는 병합 게시에 테이블이 포함되는 경우 CASCADE를 지정하지 마십시오. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하십시오.
해당 테이블에 INSTEAD OF 트리거 ON DELETE가 이미 있으면 ON DELETE CASCADE를 정의할 수 없습니다.
예를 들어
AdventureWorks2012
데이터베이스에서 ProductVendor 테이블은 Vendor 테이블과 참조 관계를 갖습니다. ProductVendor.BusinessEntityID 외래 키는 Vendor.BusinessEntityID 기본 키를 참조합니다.
Vendor 테이블의 행에 대해 DELETE 문을 실행하고 ProductVendor.BusinessEntityID에 대해 ON DELETE CASCADE 동작을 지정하면 데이터베이스 엔진은 ProductVendor 테이블에 하나 이상의 종속 행이 있는지 확인합니다. ProductVendor 테이블에 종속 행이 있는 경우 삭제되며 Vendor 테이블에서 참조된 행도 삭제됩니다.
반대로 NO ACTION을 지정한 경우 ProductVendor 테이블에 Vendor 행을 참조하는 행이 하나 이상 있으면 데이터베이스 엔진에서 오류가 발생하고 Vendor 행의 삭제 동작이 롤백됩니다.
- ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
변경된 테이블의 행에 참조 관계가 있고 참조된 행이 부모 테이블에서 업데이트될 경우 해당 행에 대해 발생할 동작을 지정합니다. 기본값은 NO ACTION입니다.
- NO ACTION
데이터베이스 엔진에서는 오류가 발생하며 부모 테이블의 행에 대한 업데이트 동작이 롤백됩니다.
- CASCADE
부모 테이블에서 행이 업데이트될 때 참조 테이블에서도 해당 행이 업데이트됩니다.
- SET NULL
부모 테이블에서 행을 업데이트하면 해당 외래 키를 구성하는 모든 값이 NULL로 설정됩니다. 이 제약 조건을 실행하려면 외래 키 열이 Null을 허용해야 합니다.
- SET DEFAULT
부모 테이블에서 행을 업데이트하면 해당 외래 키를 구성하는 모든 값이 기본값으로 설정됩니다. 이 제약 조건을 실행하려면 모든 외래 키 열에 기본 정의가 있어야 합니다. 열이 Null을 허용하고 명시적 기본값이 설정되어 있지 않은 경우 NULL은 해당 열의 암시적 기본값이 됩니다.
논리적 레코드를 사용하는 병합 게시에 테이블이 포함되는 경우 CASCADE를 지정하지 마십시오. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하십시오.
변경할 테이블에 INSTEAD OF 트리거 ON UPDATE가 이미 존재하면 ON UPDATE CASCADE, SET NULL 또는 SET DEFAULT를 정의할 수 없습니다.
예를 들어
AdventureWorks2012
데이터베이스에서 ProductVendor 테이블은 Vendor 테이블과 참조 관계를 갖습니다. ProductVendor.BusinessEntity 외래 키는 Vendor.BusinessEntityID 기본 키를 참조합니다.
Vendor 테이블의 행에 대해 UPDATE 문을 실행하고 ProductVendor.BusinessEntityID에 대해 ON UPDATE CASCADE 동작을 지정하면 데이터베이스 엔진은 ProductVendor 테이블에 하나 이상의 종속 행이 있는지 확인합니다. ProductVendor 테이블에 종속 행이 있는 경우 업데이트되며 Vendor 테이블에서 참조된 행도 업데이트됩니다.
반대로 NO ACTION을 지정한 경우 ProductVendor 테이블에 Vendor 행을 참조하는 행이 하나 이상 있으면 데이터베이스 엔진에서 오류가 발생하고 Vendor 행의 업데이트 동작이 롤백됩니다.
- CHECK
열에 입력할 수 있는 가능한 값을 제한하여 도메인 무결성을 적용하는 제약 조건입니다. 계산 열의 CHECK 제약 조건도 PERSISTED로 표시되어야 합니다.
- logical_expression
TRUE 또는 FALSE를 반환하는 논리 식입니다. 별칭 데이터 형식은 식에 포함될 수 없습니다.
- column
제약 조건 정의에서 사용하는 열을 표시하기 위해 테이블 제약 조건에서 괄호로 묶어 사용하는 열 또는 열 목록입니다.
- [ ASC | DESC ]
테이블 제약 조건에 사용되는 열의 정렬 순서를 지정합니다. 기본값은 ASC입니다.
- partition_scheme_name
분할된 테이블의 파티션이 매핑될 파일 그룹을 정의하는 파티션 구성표의 이름입니다. 파티션 구성표는 데이터베이스 내에 있어야 합니다.
- [ partition_column_name. ]
분할된 테이블의 분할 기준 열을 지정합니다. 이 열은 partition_scheme_name이 사용하는 파티션 함수에 지정된 열과 데이터 형식, 길이 및 전체 자릿수가 일치해야 합니다. 파티션 함수에 참여하는 계산 열은 명시적으로 PERSISTED로 표시되어야 합니다.
중요 |
|---|
분할된 테이블 및 ALTER TABLE...SWITCH 작업의 원본이나 대상인 분할되지 않은 테이블의 분할 열에 NOT NULL을 지정하는 것이 좋습니다. 이렇게 하면 분할 열의 CHECK 제약 조건에서 Null 값을 확인하지 않아도 됩니다. |
- WITH FILLFACTOR =fillfactor
데이터베이스 엔진이 인덱스 데이터를 저장하는 데 사용하는 각 인덱스 페이지를 채우는 정도를 지정합니다. 사용자 지정 fillfactor 값은 1에서 100 사이일 수 있습니다. 값을 지정하지 않으면 기본값 0이 사용됩니다. 채우기 비율 값 0과 100은 모든 면에서 동일합니다.
중요 |
|---|
현재 WITH FILLFACTOR = fillfactor가 PRIMARY KEY 또는 UNIQUE 제약 조건에 적용되는 유일한 인덱스 옵션으로 기술되어 있는 것은 이전 버전과의 호환성을 위한 것이며 이후 릴리스에서는 수록되지 않을 것입니다. |
- column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
열 집합의 이름입니다. 열 집합은 구조화된 출력으로 테이블의 모든 스파스 열을 결합하는 형식화되지 않은 XML 표현입니다. 열 집합에 대한 자세한 내용은 열 집합 사용을 참조하십시오.
- < table_option> ::=
하나 이상의 테이블 옵션을 지정합니다.
- DATA_COMPRESSION
지정된 테이블, 파티션 번호 또는 파티션 범위에 대한 데이터 압축 옵션을 지정합니다. 다음과 같은 옵션이 있습니다.
- NONE
테이블 또는 지정된 파티션이 압축되지 않습니다.
- ROW
테이블 또는 지정된 파티션이 행 압축을 사용하여 압축됩니다.
- PAGE
테이블 또는 지정된 파티션이 페이지 압축을 사용하여 압축됩니다.
압축에 대한 자세한 내용은 데이터 압축를 참조하십시오.
- ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
DATA_COMPRESSION 설정을 적용할 파티션을 지정합니다. 테이블이 분할되지 않은 경우 ON PARTITIONS 인수를 사용하면 오류가 발생합니다. ON PARTITIONS 절을 지정하지 않으면 DATA_COMPRESSION 옵션이 분할된 테이블의 모든 파티션에 적용됩니다.
<partition_number_expression>은 다음과 같은 방법으로 지정할 수 있습니다.
파티션의 파티션 번호를 지정합니다(예: ON PARTITIONS (2)).
여러 개별 파티션의 파티션 번호를 쉼표로 구분하여 지정합니다(예: ON PARTITIONS (1, 5)).
범위와 개별 파티션을 모두 지정합니다(예: ON PARTITIONS (2, 4, 6 TO 8)).
<range>는 TO로 구분된 파티션 번호로 지정할 수 있습니다(예: ON PARTITIONS (6 TO 8)).
여러 파티션에 대해 서로 다른 데이터 압축 유형을 설정하려면 DATA_COMPRESSION 옵션을 두 번 이상 지정합니다. 예를 들면 다음과 같습니다.
WITH
(
DATA_COMPRESSION = NONE ON PARTITIONS (1),
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
)
- <index_option> ::=
하나 이상의 인덱스 옵션을 지정합니다. 이러한 옵션에 대한 자세한 내용은 CREATE INDEX(Transact-SQL)를 참조하십시오.
- PAD_INDEX = { ON | OFF }
ON이면 FILLFACTOR로 지정한 사용 가능한 공간의 비율을 인덱스의 중간 수준 페이지에 적용합니다. OFF이거나 FILLFACTOR 값을 지정하지 않으면 중간 페이지의 키 집합을 고려하여 인덱스가 가질 수 있는 최대 크기의 행을 최소한 하나만큼 저장할 공간을 남기고 용량 한계에 가깝게 중간 수준 페이지를 채웁니다. 기본값은 OFF입니다.
- FILLFACTOR =fillfactor
인덱스를 만들거나 변경할 때 데이터베이스 엔진이 각 인덱스 페이지의 리프 수준을 채우는 비율을 지정합니다. fillfactor는 1에서 100 사이의 정수 값이어야 하며 기본값은 0입니다. 채우기 비율 값 0과 100은 모든 면에서 동일합니다.
- IGNORE_DUP_KEY = { ON | OFF }
삽입 작업에서 고유 인덱스에 중복된 키 값을 삽입하려는 경우에 대한 오류 응답을 지정합니다. IGNORE_DUP_KEY 옵션은 인덱스를 만들거나 다시 작성한 후의 삽입 작업에만 적용됩니다. CREATE INDEX, ALTER INDEX 또는 UPDATE를 실행하는 경우에는 이 옵션이 아무런 영향을 미치지 않습니다. 기본값은 OFF입니다.
- ON
중복된 키 값이 고유 인덱스에 삽입되는 경우 경고 메시지가 나타나고 고유성 제약 조건을 위반하는 행만 실패합니다.
- OFF
중복된 키 값이 고유 인덱스에 삽입되는 경우 오류 메시지가 나타나고 전체 INSERT 작업이 롤백됩니다.
뷰, 비고유 인덱스, XML 인덱스, 공간 인덱스 및 필터링된 인덱스에 생성된 인덱스의 경우 IGNORE_DUP_KEY를 ON으로 설정할 수 없습니다.
IGNORE_DUP_KEY를 보려면 sys.indexes를 사용하십시오.
이전 버전과 호환되는 구문에서 WITH IGNORE_DUP_KEY는 WITH IGNORE_DUP_KEY = ON과 같습니다.
- STATISTICS_NORECOMPUTE = { ON | OFF }
ON이면 오래된 인덱스 통계를 자동으로 다시 계산하지 않습니다. OFF이면 자동 통계 업데이트를 활성화합니다. 기본값은 OFF입니다.
- ALLOW_ROW_LOCKS = { ON | OFF }
ON이면 인덱스에 액세스할 때 행 잠금이 허용됩니다. 행 잠금을 사용하는 시점은 데이터베이스 엔진이 결정합니다. OFF이면 행 잠금을 사용하지 않습니다. 기본값은 ON입니다.
- ALLOW_PAGE_LOCKS = { ON | OFF }
ON이면 인덱스에 액세스할 때 페이지 잠금이 허용됩니다. 페이지 잠금을 사용하는 시점은 데이터베이스 엔진이 결정합니다. OFF이면 페이지 잠금을 사용하지 않습니다. 기본값은 ON입니다.
- FILETABLE_DIRECTORY = directory_name
Windows 호환 FileTable 디렉터리 이름을 지정합니다. 이 이름은 데이터베이스의 모든 FileTable 디렉터리 이름 중에서 고유해야 합니다. 고유성을 비교할 때는 데이터 정렬 설정과 관계없이 대/소문자가 구분되지 않습니다. 이 값을 지정하지 않으면 Filetable의 이름이 사용됩니다.
- FILETABLE_COLLATE_FILENAME = { collation_name | database_default }
FileTable의 Name 열에 적용할 데이터 정렬의 이름을 지정합니다. 데이터 정렬은 Windows 파일 명명 의미 체계를 따르도록 대/소문자를 구분하지 않아야 합니다. 이 값을 지정하지 않으면 데이터베이스 기본 데이터 정렬이 사용됩니다. 데이터베이스 기본 데이터 정렬이 대/소문자를 구분하면 오류가 발생하고 CREATE TABLE 작업이 실패합니다.
- collation_name
대/소문자를 구분하지 않는 데이터 정렬의 이름입니다.
- database_default
데이터베이스의 기본 데이터 정렬을 사용하도록 지정합니다. 이 데이터 정렬은 대/소문자를 구분하지 않아야 합니다.
- FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name
FileTable에 자동으로 만들어지는 기본 키 제약 조건에 사용할 이름을 지정합니다. 이 값을 지정하지 않으면 시스템에서 제약 조건 이름을 생성합니다.
- FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name
FileTable에서 stream_id 열에 자동으로 만들어지는 고유한 제약 조건에 사용할 이름을 지정합니다. 이 값을 지정하지 않으면 시스템에서 제약 조건 이름을 생성합니다.
- FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name
FileTable에서 parent_path_locator 및 name 열에 자동으로 만들어지는 고유한 제약 조건에 사용할 이름을 지정합니다. 이 값을 지정하지 않으면 시스템에서 제약 조건 이름을 생성합니다.