column_definition(Transact-SQL)

ALTER TABLE을 사용하여 테이블에 추가된 열의 속성을 지정합니다.

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ] 
      | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ] 
    [ SPARSE ] 
    [ <column_constraint> [ ...n ] ]

<data type> ::= 
[ type_schema_name . ] type_name 
    [ ( precision [ , scale ] | max | 
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ] 

<column_constraint> ::= 
[ CONSTRAINT constraint_name ] 
{     { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        [ 
            WITH FILLFACTOR = fillfactor  
          | WITH ( < index_option > [ , ...n ] ) 
        ] 
        [ ON { partition_scheme_name ( partition_column_name ) 
            | filegroup | "default" } ]
  | [ FOREIGN KEY ] 
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
} 

인수

  • column_name
    변경, 추가 또는 삭제할 열의 이름입니다. column_name은 1-128자로 구성될 수 있습니다. 새 열의 경우 타임스탬프 데이터 형식으로 만들어진 column_name을 생략할 수 있습니다. timestamp 데이터 형식 열에 column_name을 지정하지 않으면 timestamp가 이름으로 사용됩니다.

  • [ type_schema_name**.** ] type_name
    추가된 열 및 해당 열이 속한 스키마의 데이터 형식입니다.

    type_name은 다음 값이 될 수 있습니다.

    • Microsoft SQL Server 시스템 데이터 형식

    • SQL Server 시스템 데이터 형식을 기반으로 하는 별칭 데이터 형식. 별칭 데이터 형식은 테이블 정의에 사용하기 전에 CREATE TYPE을 사용하여 생성되어야 합니다.

    • Microsoft .NET Framework 사용자 정의 형식 및 이 형식이 속한 스키마. .NET Framework 사용자 정의 형식은 테이블 정의에 사용하기 전에 CREATE TYPE을 사용하여 생성되어야 합니다.

    type_schema_name을 지정하지 않으면 Microsoft 데이터베이스 엔진에서는 다음 순서로 type_name을 참조합니다.

    • SQL Server 시스템 데이터 형식

    • 현재 데이터베이스에 있는 현재 사용자의 기본 스키마

    • 현재 데이터베이스의 dbo 스키마

  • precision
    지정된 데이터 형식의 전체 자릿수입니다. 유효한 전체 자릿수 값에 대한 자세한 내용은 전체 자릿수, 소수 자릿수 및 길이(Transact-SQL)를 참조하십시오.

  • scale
    지정된 데이터 형식의 소수 자릿수입니다. 유효한 소수 자릿수 값에 대한 자세한 내용은 전체 자릿수, 소수 자릿수 및 길이(Transact-SQL)를 참조하십시오.

  • max
    varchar, nvarchar 및 varbinary 데이터 형식에만 적용됩니다. 2^31바이트의 문자 및 이진 데이터와 2^30바이트의 유니코드 데이터를 저장하는 데 사용됩니다.

  • 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을 사용하여 데이터베이스에서 해당 스키마를 만들어야 합니다.

  • FILESTREAM
    선택적으로 type_name이 varbinary(max)인 열에 대해 FILESTREAM 저장소 특성을 지정합니다.

    열에 대해 FILESTREAM이 지정된 경우 ROWGUIDCOL 특성을 갖는 uniqueidentifier 데이터 형식의 열도 테이블에 있어야 합니다. 이 열은 Null 값을 허용하지 않으며 UNIQUE 또는 PRIMARY KEY 단일 열 제약 조건을 가져야 합니다. 열의 GUID 값은 응용 프로그램(데이터가 삽입되는 경우)에 의해 또는 NEWID () 함수를 사용하는 DEFAULT 제약 조건에 의해 제공되어야 합니다.

    테이블에 대해 정의된 FILESTREAM 열이 있는 동안에는 ROWGUIDCOL 열을 삭제하고 관련 제약 조건을 변경할 수 없습니다. ROWGUIDCOL 열은 마지막 FILESTREAM 열이 삭제된 이후에만 삭제될 수 있습니다.

    열에 대해 FILESTREAM 저장소 특성이 지정된 경우 해당 열의 모든 값이 파일 시스템에 있는 FILESTREAM 데이터 컨테이너에 저장됩니다.

    열 정의 사용 방법을 보여 주는 예는 FILESTREAM(SQL Server)을 참조하십시오.

  • COLLATE collation_name
    열에 대한 데이터 정렬을 지정합니다. 이를 지정하지 않으면 열에 데이터베이스의 기본 데이터 정렬이 할당됩니다. 데이터 정렬 이름으로는 Windows 데이터 정렬 이름 또는 SQL 데이터 정렬 이름을 사용할 수 있습니다. 목록 및 자세한 내용은 Windows 데이터 정렬 이름(Transact-SQL)SQL Server 데이터 정렬 이름(Transact-SQL)을 참조하십시오.

    COLLATE 절은 char, varchar, nchar 및 nvarchar 데이터 형식의 열에 데이터 정렬을 지정하는 데만 사용할 수 있습니다.

    COLLATE 절에 대한 자세한 내용은 COLLATE(Transact-SQL)를 참조하십시오.

  • NULL | NOT NULL
    열의 Null 값 허용 여부를 결정합니다. NULL은 엄격하게 말해 제약 조건이 아니지만 NOT NULL처럼 지정할 수 있습니다.

  • [ CONSTRAINT constraint_name ]
    DEFAULT 값 정의의 시작을 지정합니다. 이전 버전의 SQL Server와 호환성을 유지하기 위해 DEFAULT에 제약 조건 이름을 할당할 수 있습니다. constraint_name은 이름을 숫자 기호(#)로 시작할 수 없다는 점을 제외하고는 식별자에 적용되는 규칙을 따라야 합니다. constraint_name을 지정하지 않으면 시스템 생성 이름이 DEFAULT 정의에 할당됩니다.

  • DEFAULT
    열의 기본값을 지정하는 키워드입니다. DEFAULT 정의를 사용하여 기존 데이터 행에 있는 새 열의 값을 제공할 수 있습니다. DEFAULT 정의는 timestamp 열 또는 IDENTITY 속성이 있는 열에는 적용할 수 없습니다. 사용자 정의 유형 열에 대해 기본값을 지정할 경우 constant_expression에서 해당 사용자 정의 유형으로 암시적으로 변환할 수 있어야 합니다.

  • constant_expression
    기본 열 값으로 사용되는 리터럴 값, NULL, 시스템 함수입니다. .NET Framework 사용자 정의 유형으로 정의된 열과 함께 사용할 경우 constant_expression에서 사용자 정의 유형으로의 암시적 변환이 지원되어야 합니다.

  • WITH VALUES
    DEFAULT constant_expression에 지정된 값이 기존 행에 추가된 새 열에 저장되는지를 지정합니다. 추가된 열에 null 값을 사용할 수 있고 WITH VALUES가 지정된 경우 기존 행에 추가된 새 열에 기본값이 저장됩니다. null 값을 허용하는 열에 WITH VALUES를 지정하지 않으면 NULL 값이 기존 행의 새 열에 저장됩니다. 새 열이 null 값을 허용하지 않으면 WITH VALUES의 지정 여부에 관계없이 새 행에 기본값이 저장됩니다.

  • IDENTITY
    새 열이 ID 열임을 지정합니다. SQL Server 데이터베이스 엔진은 열에 고유한 증가값을 제공합니다. 기존 테이블에 ID 열을 추가하면 ID 번호가 테이블의 기존 행에 추가되며 초기값과 증가값이 적용됩니다. 행이 업데이트되는 순서는 보장되지 않습니다. 새로 추가한 모든 행에 대한 ID 열도 생성됩니다.

    ID 열은 일반적으로 PRIMARY KEY 제약 조건과 함께 사용되어 테이블에 대한 고유한 행 식별자 역할을 합니다. IDENTITY 속성은 tinyint, smallint, int, bigint, decimal(p,0) 또는 numeric(p,0) 열에 할당할 수 있습니다. ID 열은 각 테이블마다 하나만 만들 수 있습니다. DEFAULT 키워드 및 바인딩된 기본값은 ID 열에 사용할 수 없습니다. 초기값과 증가값은 모두 지정하거나 둘 다 지정하지 말아야 합니다. 아무 것도 지정하지 않으면 기본값은 (1,1)입니다.

    [!참고]

    기존 테이블 열을 수정하여 IDENTITY 속성을 추가할 수는 없습니다.

    열이 구독자로 복제될 때 데이터가 일치하지 않을 수 있기 때문에 게시된 테이블에는 ID 열을 추가할 수 없습니다. 게시자의 ID 열 값은 영향을 받는 테이블 행이 실제로 저장된 순서에 따라 달라집니다. 구독자에서는 행이 다르게 저장될 수 있으므로 ID 열의 값이 같은 행에 대해 다를 수 있습니다.

    값을 명시적으로 삽입할 수 있도록 허용하여 열의 IDENTITY 속성을 해제하려면 SET IDENTITY_INSERT를 사용하십시오.

  • seed
    테이블에 로드된 첫 번째 행에 사용되는 값입니다.

  • increment
    이전에 로드된 행의 ID 값에 더해지는 증가 값입니다.

  • NOT FOR REPLICATION
    IDENTITY 속성에 지정할 수 있습니다. 이 절이 IDENTITY 속성에 지정된 경우 복제 에이전트가 삽입 작업을 수행할 때 ID 열의 값이 증가하지 않습니다.

  • ROWGUIDCOL
    열이 ROWGUIDCOL(행 전역 고유 식별자 열)인지 여부를 지정합니다. ROWGUIDCOL은 uniqueidentifier 열에만 할당될 수 있고 한 테이블당 한 개의 uniqueidentifier 열만 ROWGUIDCOL 열로 지정할 수 있습니다. ROWGUIDCOL은 사용자 정의 데이터 형식의 열에 할당할 수 없습니다.

    ROWGUIDCOL로 인해 열에 저장된 값이 고유하도록 설정되거나 테이블에 삽입된 새 행에 대한 값을 자동으로 생성하지 않습니다. 각 열에 대해 고유한 값을 생성하려면 INSERT 문에 NEWID 함수를 사용하거나 NEWID 함수를 열의 기본값으로 지정합니다. 자세한 내용은 NEWID(Transact-SQL)INSERT(Transact-SQL)를 참조하십시오.

  • SPARSE
    열이 스파스 열임을 나타냅니다. 스파스 열의 저장소는 Null 값에 대해 최적화됩니다. 스파스 열은 NOT NULL로 지정할 수 없습니다. 추가 제한 사항 및 스파스 열에 대한 자세한 내용은 스파스 열 사용을 참조하십시오.

  • <column_constraint>
    열 제약 조건 인수에 대한 정의는 column_constraint(Transact SQL)를 참조하십시오.

주의

uniqueidentifier 데이터 형식의 열이 추가되면 NEWID() 함수를 기본으로 사용하도록 하여 테이블의 기존 행에 새 열이 추가될 때 고유한 ID 값을 제공하도록 할 수 있습니다.

데이터베이스 엔진에서는 열 정의에 DEFAULT, IDENTITY, ROWGUIDCOL 또는 열 제약 조건을 순서에 관계없이 지정할 수 있습니다.

열을 추가하여 데이터 행 크기가 8060바이트를 초과하면 ALTER TABLE 문이 실패합니다.

예를 보려면 ALTER TABLE(Transact-SQL)을 참조하십시오.

참고 항목

참조

ALTER TABLE(Transact-SQL)