COLLATE(Transact-SQL)

데이터베이스 정의 또는 열 정의에 적용하여 데이터 정렬을 정의하거나 문자열 식에 적용하여 데이터 정렬 캐스트를 적용하기 위한 절입니다.

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

구문

COLLATE { <collation_name> | database_default }
<collation_name> :: = 
     { Windows_collation_name } | { SQL_collation_name }

인수

  • collation_name
    식, 열 정의, 또는 데이터베이스 정의에 적용할 데이터 정렬의 이름입니다. collation_name에는 지정된 Windows_collation_name 또는 SQL_collation_name만 사용할 수 있습니다. collation_name은 리터럴 값이어야 합니다. 변수나 식으로 collation_name을 나타낼 수 없습니다.

    Windows_collation_name은 Windows 데이터 정렬 이름의 데이터 정렬 이름입니다.

    SQL_collation_name은 SQL Server 데이터 정렬 이름의 데이터 정렬 이름입니다.

    데이터베이스 정의 수준에서 데이터 정렬을 적용하면 COLLATE 절에서 Windows 유니코드 전용 데이터 정렬을 사용할 수 없습니다.

  • database_default
    COLLATE 절이 현재 데이터베이스의 데이터 정렬을 상속하도록 합니다.

주의

COLLATE 절은 여러 수준에서 지정할 수 있습니다. 지정 가능한 수준은 다음과 같습니다.

  1. 데이터베이스 만들기 또는 변경

    CREATE DATABASE 또는 ALTER DATABASE 문의 COLLATE 절을 사용하여 데이터베이스의 기본 데이터 정렬을 지정할 수 있습니다. 또한 SQL Server Management Studio를 사용하여 데이터베이스를 만들 때 데이터 정렬을 지정할 수 있습니다. 데이터 정렬을 지정하지 않은 경우에는 SQL Server 인스턴스의 기본 데이터 정렬이 데이터베이스에 할당됩니다.

    [!참고]

    Windows 유니코드 전용 데이터 정렬은 COLLATE 절에서 열 수준 및 식 수준 데이터의 nchar, nvarchar 및 ntext 데이터 형식에 데이터 정렬을 적용하기 위해서만 사용할 수 있고 COLLATE 절에서 데이터베이스 또는 서버 인스턴스의 데이터 정렬을 변경하기 위해 사용할 수는 없습니다.

  2. 테이블 열 만들기 또는 변경

    CREATE TABLE 또는 ALTER TABLE 문의 COLLATE 절을 사용하여 각 문자열 열에 대한 데이터 정렬을 지정할 수 있습니다. 또한 SQL Server Management Studio를 사용하여 테이블을 만들 때 데이터 정렬을 지정할 수 있습니다. 데이터 정렬을 지정하지 않은 경우에는 데이터베이스의 기본 데이터 정렬이 열에 할당됩니다.

    또한 COLLATE 절에서 database_default 옵션을 사용하여 임시 테이블의 열이 연결에 대해 tempdb 대신 현재 사용자 데이터베이스의 기본 데이터 정렬을 사용하도록 지정할 수 있습니다.

  3. 식의 데이터 정렬 캐스팅

    COLLATE 절을 사용하여 문자 식을 특정 데이터 정렬에 적용할 수 있습니다. 문자 리터럴과 변수에는 현재 데이터베이스의 기본 데이터 정렬이 할당됩니다. 열 참조에는 열의 기본 데이터 정렬이 할당됩니다. 식의 데이터 정렬에 대한 내용은 선행 정렬(Transact-SQL)을 참조하십시오.

식별자의 데이터 정렬은 식별자가 정의된 수준에 따라 달라집니다. 로그인과 데이터베이스 이름 등 인스턴스 수준 개체의 식별자에는 인스턴스의 기본 데이터 정렬이 할당됩니다. 테이블, 뷰, 열 이름 등 데이터베이스에 있는 개체의 식별자에는 데이터베이스의 기본 데이터 정렬이 할당됩니다. 예를 들어 대/소문자만 다르고 동일한 이름인 두 테이블은 데이터 정렬이 대/소문자를 구분하는 데이터베이스에서는 만들 수 있지만 대/소문자를 구분하지 않는 데이터베이스에서는 만들 수 없습니다. 자세한 내용은 식별자를 참조하십시오.

변수, GOTO 레이블, 임시 저장 프로시저 및 임시 테이블은 연결 컨텍스트를 한 데이터베이스와 연결한 경우에 만들 수 있으며 컨텍스트를 다른 데이터베이스로 전환한 경우에 참조할 수 있습니다. 변수, GOTO 레이블, 임시 저장 프로시저 및 임시 테이블의 식별자는 서버 인스턴스의 기본 데이터 정렬에 있습니다.

COLLATE 절은 char, varchar, text, nchar, nvarchar 및 ntext 데이터 형식에 대해서만 적용할 수 있습니다.

COLLATE는 collate_name을 사용하여 식, 열 정의 또는 데이터베이스 정의에 적용할 SQL Server 데이터 정렬 또는 Windows 데이터 정렬의 이름을 참조합니다. collation_name에는 지정된 Windows_collation_name 또는 SQL_collation_name만 사용할 수 있으며 매개 변수에는 리터럴 값이 포함되어야 합니다. collation_name은 변수나 식으로 나타낼 수 없습니다.

데이터 정렬은 설치할 때를 제외하고 일반적으로 데이터 정렬 이름으로 식별됩니다. 설치할 때는 Windows 데이터 정렬에 대해 루트 데이터 정렬 지정자(데이터 정렬 로캘)를 지정한 다음 대소문자와 악센트를 구분하거나 구분하지 않는 정렬 옵션을 지정합니다.

시스템 함수인 fn_helpcollations를 실행하여 Windows 데이터 정렬과 SQL Server 데이터 정렬에 대해 유효한 모든 데이터 정렬 이름의 목록을 검색할 수 있습니다.

SELECT *
FROM fn_helpcollations()

SQL Server는 해당 운영 체제에서 지원되는 코드 페이지만 지원할 수 있습니다. 데이터 정렬을 기반으로 하는 동작을 수행할 때마다 참조된 개체가 사용하는 SQL Server 데이터 정렬은 시스템에서 실행 중인 운영 체제가 지원하는 코드 페이지를 사용해야 합니다. 여기에는 다음과 같은 동작이 포함됩니다.

  • 데이터베이스를 만들거나 변경할 때 데이터베이스에 대한 기본 데이터 정렬 지정

  • 테이블을 만들거나 변경할 때 열에 대한 데이터 정렬 지정

  • 데이터베이스를 복원하거나 연결할 때 데이터베이스의 기본 데이터 정렬과 데이터베이스 내의 모든 char, varchar 및 text 열 또는 매개 변수의 데이터 정렬은 반드시 운영 체제에서 지원되는 것이어야 합니다.

    char 및 varchar 데이터 형식에 대해서는 코드 페이지 변환이 지원되지만 text 데이터 형식에 대해서는 지원되지 않습니다. 코드 페이지 변환 중 데이터가 손실되어도 보고되지 않습니다.

지정된 데이터 정렬 또는 참조된 개체가 사용하는 데이터 정렬에서 Windows가 지원하지 않는 코드 페이지를 사용하는 경우에는 SQL Server에서 오류가 나타납니다.