다음을 통해 공유


데이터베이스 식별자

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics분석 플랫폼 시스템 (PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 데이터 웨어하우스Microsoft Fabric의 SQL 데이터베이스

데이터베이스 개체 이름은 식별자입니다.

테이블, 뷰, 열, 인덱스, 트리거, 프로시저, 제약 조건 및 규칙과 같은 서버, 데이터베이스 및 데이터베이스 개체에는 식별자가 있을 수 있습니다. 대부분의 개체에는 식별자가 필요하지만 제약 조건과 같은 일부 개체는 이를 선택적으로 만듭니다.

개체를 정의할 때 개체 식별자를 만듭니다. 식별자를 사용하여 개체를 참조합니다. 예를 들어 다음 문은 식별자 TableX가 있는 테이블과 별자가 KeyColDescription이 있는 두 열을 만듭니다.

CREATE TABLE TableX
(
    KeyCol INT PRIMARY KEY,
    Description NVARCHAR (80)
);

이 테이블에는 명명되지 않은 제약 조건이 있습니다. 기본 키 제약 조건에는 사용자 지정 식별자가 없으므로 시스템에서 생성된 이름(예: PK__TableX__D7CB9CCCEEF0806C.)을 할당합니다. sys.key_constraints와 같은 시스템 메타데이터 뷰에서 이 이름을 볼 수 있습니다.

제약 조건 이름 및 기타 스키마 범위 개체는 데이터베이스 스키마 내에서 고유해야 합니다. 예를 들어 두 개의 기본 키 제약 조건은 이름을 공유할 수 없습니다. 그러나 열 이름은 스키마가 아닌 각 테이블 내에서만 고유해야 합니다.

식별자의 데이터 정렬은 정의한 수준에 따라 달라집니다.

  • 인스턴스의 기본 데이터 정렬은 로그인 및 데이터베이스 이름과 같은 인스턴스 수준 개체의 식별자에 할당됩니다.

  • 데이터베이스의 기본 데이터 정렬은 테이블, 뷰 및 열 이름과 같은 데이터베이스의 개체 식별자에 할당됩니다. 예를 들어 대/소문자를 구분하는 데이터 정렬이 있는 데이터베이스의 경우에만 이름이 다른 두 개의 테이블을 만들 수 있지만 대/소문자를 구분하지 않는 데이터 정렬이 있는 데이터베이스에는 만들 수 없습니다.

Note

변수 이름 또는 함수 및 저장 프로시저의 매개 변수는 Transact-SQL 식별자에 대한 규칙을 준수해야 합니다.

식별자 클래스

식별자의 두 가지 클래스가 있습니다.

  • 일반 식별자는 식별자에 대한 형식 규칙을 준수합니다. Transact-SQL 문에서 사용할 때는 구분되지 않습니다. 일반 식별자는 일반 식별자에 대한 규칙을 따라야 합니다. 문자, 숫자 및 특정 기호(_, @, ,#$)만 포함할 수 있으며, 문자 또는 그 중 _@#하나로 시작해야 하며 예약어일 수 없습니다.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • 구분 식별자는 큰따옴표(") 또는 대괄호([])로 표시됩니다. 구분 기호를 사용하면 예약된 키워드, 공백이 있는 이름 또는 특수 문자가 있는 이름과 같이 일반 식별자로 유효하지 않은 이름을 사용할 수 있습니다. 이미 일반 식별자 규칙을 준수하는 식별자도 구분할 수 있지만 이 경우 구분 기호는 선택 사항입니다. 자세한 내용은 구분된 식별자에 대한 규칙을 참조하세요.

    USE AdventureWorks2025;
    GO
    
    SELECT *
    FROM [HumanResources].[Employee] --Delimiter is optional.
    WHERE [NationalIDNumber] = 153479919; --Delimiter is optional.
    

일반 식별자에 대한 규칙을 준수하지 않는 식별자는 Transact-SQL 문으로 구분되어야 합니다. 다음은 그 예입니다.

USE AdventureWorks2025;
GO

--Identifier contains a space and uses a reserved keyword.
CREATE TABLE [SalesOrderDetail Table]
(
    [Order] INT NOT NULL,
    [SalesOrderDetailID] INT IDENTITY (1, 1) NOT NULL,
    [OrderQty] SMALLINT NOT NULL,
    [ProductID] INT NOT NULL,
    [UnitPrice] MONEY NOT NULL,
    [UnitPriceDiscount] MONEY NOT NULL,
    [ModifiedDate] DATETIME NOT NULL,
    CONSTRAINT [PK_SalesOrderDetail_Order_SalesOrderDetailID] PRIMARY KEY CLUSTERED
    (
        [Order] ASC,
        [SalesOrderDetailID] ASC
    )
);
GO

SELECT *
FROM [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
WHERE [Order] = 10; --Identifier is a reserved keyword.

일반 식별자와 구분 식별자는 모두 1부터 128자까지 되어 있어야 합니다. 로컬 임시 테이블의 경우 식별자는 최대 116자입니다.

구분된 식별자에 대한 규칙

구분된 식별자는 대괄호([]) 또는 큰따옴표(")로 묶입니다. 공백, 예약된 키워드 및 일반 식별자에서 허용되지 않는 특수 문자를 비롯한 문자의 조합을 포함할 수 있습니다.

대괄호로 구분된 식별자

대괄호로 구분된 식별자는 대괄호([])로 묶입니다. 식별자 자체에 오른쪽 대괄호(])가 포함되어 있으면, 이를 이스케이프하기 위해 오른쪽 대괄호를 두 번 사용합니다(]]). 왼쪽 대괄호([)에는 이스케이프가 필요하지 않습니다.

예를 들어 이름에 대괄호가 포함된 테이블을 만들고 쿼리하려면 다음을 수행합니다.

-- Create a table with a ] character in its name.
CREATE TABLE [My]]Table]
(
    ID INT PRIMARY KEY
);
GO

-- Reference the table in a query.
SELECT *
FROM [My]]Table];
GO

이 함수는 QUOTENAME 지정된 문자열에 대해 유효한 대괄호로 구분된 식별자를 반환하고 이스케이프를 자동으로 처리합니다.

SELECT QUOTENAME('abc[]def');

이전 예제에서는 .를 반환합니다 [abc[]]def].

큰따옴표로 구분된 식별자

큰따옴표로 구분된 식별자는 큰따옴표(")로 묶입니다. 식별자 자체에 큰따옴표가 포함된 경우 두 배로 늘려 이스케이프합니다("").

큰따옴표 구분 기호가 필요합니다 SET QUOTED_IDENTIFIER ON (대부분의 연결에 대한 기본값). QUOTED_IDENTIFIER OFF 경우 데이터베이스 엔진 큰따옴표가 붙은 문자열을 식별자 대신 문자열 리터럴로 처리합니다. 자세한 내용은 SET QUOTED_IDENTIFIER 참조하세요.

예를 들어 예약된 키워드를 식별자로 사용하는 테이블을 만들고 쿼리하려면 다음을 수행합니다.

SET QUOTED_IDENTIFIER ON;
GO

-- Create a table using double-quote delimiters.
CREATE TABLE "My Table"
(
    "Order" INT NOT NULL,
    "Description" NVARCHAR (100)
);
GO

SELECT "Order",
       "Description"
FROM "My Table";
GO

Note

SET QUOTED_IDENTIFIER 는 대괄호로 구분된 식별자에 영향을 주지 않습니다. 대괄호 구분 기호는 설정에 QUOTED_IDENTIFIER 관계없이 항상 작동합니다.

일반 식별자에 대한 규칙

변수, 함수 및 저장 프로시저의 이름은 Transact-SQL 식별자에 대해 다음 규칙을 따라야 합니다.

  1. 첫 번째 문자는 다음 문자 중 하나여야 합니다.

    • Unicode Standard 3.2에서 정의한 문자 Unicode에서 문자란 라틴어 문자 a~z, A~Z와 타 언어의 문자를 말합니다.

    • 밑줄(_), @ 기호(@) 또는 숫자 기호(#).

      식별자의 시작 부분에 있는 특정 기호는 데이터베이스 엔진 특별한 의미를 갖습니다. @ 기호로 시작하는 일반 식별자는 항상 지역 변수나 매개 변수를 표시하며 다른 개체 유형의 이름으로 사용할 수 없습니다. 숫자 기호(#)로 시작하는 식별자는 임시 테이블 또는 임시 프로시저를 나타냅니다. 이중 숫자 기호(##)로 시작하는 식별자는 전역 임시 개체를 나타냅니다. 숫자 기호 또는 이중 숫자 기호 문자를 사용하여 다른 형식의 개체 이름을 시작할 수 있지만 이 방법은 사용하지 않아야 합니다.

      일부 Transact-SQL 함수에는 두 번 기호로 시작하는 이름이 있습니다(@@). 이러한 함수와의 혼동을 방지하려면 .로 시작하는 @@이름을 사용하지 마세요.

  2. 후속 문자에는 다음 목록이 포함될 수 있습니다.

    • Unicode Standard 3.2에서 정의한 문자

    • 기본 라틴어 또는 기타 국가별 스크립트의 10진수입니다.

    • @ 기호(@), 달러 기호($), 숫자 기호(#) 또는 밑줄(_).

  3. 식별자는 Transact-SQL 예약어가 아니어야 합니다. 데이터베이스 엔진 예약어의 대문자 및 소문자 버전을 모두 예약합니다. Transact-SQL 문에서 식별자를 사용하는 경우 큰따옴표 또는 대괄호를 사용하여 이러한 규칙을 준수하지 않는 식별자를 구분합니다. 예약되는 단어는 데이터베이스 호환성 수준에 따라 다릅니다. ALTER DATABASE 호환성 수준 문을 사용하여 데이터베이스 호환성 수준을 설정합니다.

  4. 포함된 공백이나 특수 문자를 사용하지 마세요.

  5. 보조 문자를 사용하지 마세요.

Transact-SQL 문에서 식별자를 사용하는 경우 큰따옴표 또는 대괄호를 사용하여 이러한 규칙을 준수하지 않는 식별자를 구분합니다. 이러한 규칙 중 일부는 데이터베이스 호환성 수준에 따라 달라집니다.

Azure SQL Database 카탈로그 데이터 정렬

Azure SQL Database 논리 서버 데이터 정렬을 변경하거나 설정할 수 없습니다. 하지만 데이터베이스의 데이터 및 카탈로그에 대해 각 데이터베이스의 데이터 정렬을 별도로 구성할 수 있습니다. 카탈로그 데이터 정렬은 개체 식별자와 같은 시스템 메타데이터에 대한 데이터 정렬을 결정합니다. Azure Portal에서 데이터베이스를 만들 때, Transact-SQL(T-SQL)에서 CREATE DATABASE를 사용하거나 PowerShell에서 New-AzSqlDatabase를 활용할 때 두 데이터 정렬을 독립적으로 지정할 수 있습니다.

세부 정보와 예는 CREATE DATABASE를 참조하세요. 데이터베이스(COLLATE)에 대한 데이터 정렬 및 시스템 메타데이터 및 개체 식별자(CATALOG_COLLATION)에 대한 카탈로그 데이터 정렬을 지정합니다.

Microsoft Fabric SQL 데이터베이스의 카탈로그 데이터 정렬

Fabric SQL 데이터베이스의 기본 데이터 정렬은 SQL_Latin1_General_CP1_CI_AS. 배포 시 다른 데이터 정렬을 구성할 수 있지만 데이터베이스를 만든 후에는 변경할 수 없습니다. 개별 열은 자체 데이터 정렬을 사용할 수 있습니다. 배포 옵션에 대한 자세한 내용은 Fabric SQL 데이터베이스를 만들기 위한 작업을 참조하세요.