데이터베이스 식별자
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform Syste(PDW) Microsoft Fabric의SQL 분석 엔드포인트 Microsoft Fabric의 Warehouse
데이터베이스 개체 이름을 그 개체의 식별자라고 합니다. SQL Server의 모든 개체에는 식별자가 있습니다. 테이블, 뷰, 열, 인덱스, 트리거, 프로시저, 제약 조건 및 규칙과 같은 서버, 데이터베이스 및 데이터베이스 개체에는 식별자가 있을 수 있습니다. 식별자는 대부분의 개체에 필요하지만 제약 조건과 같은 일부 개체에는 선택 사항입니다.
개체의 식별자는 개체를 정의할 때 만들어집니다. 만들어진 식별자는 개체를 참조하는 데 사용됩니다. 예를 들어 다음 문은 식별자 TableX
가 있는 테이블과 별자가 KeyCol
와 Description
이 있는 두 열을 만듭니다.
CREATE TABLE TableX (
KeyCol INT PRIMARY KEY,
Description NVARCHAR(80)
);
이 테이블에는 명명되지 않은 제약 조건도 있습니다. PRIMARY KEY
제약 조건에는 식별자가 없습니다.
식별자의 데이터 정렬은 식별자가 정의된 수준에 따라 달라집니다. 로그인과 데이터베이스 이름 등 인스턴스 수준 개체의 식별자에는 인스턴스의 기본 데이터 정렬이 할당됩니다. 테이블, 뷰, 열 이름 등 데이터베이스에 있는 개체의 식별자에는 데이터베이스의 기본 데이터 정렬이 할당됩니다. 예를 들어 대/소문자만 다르고 이름 같은 두 테이블은 데이터 정렬이 대/소문자를 구분하는 데이터베이스에서는 만들 수 있지만 대/소문자를 구분하지 않는 데이터베이스에서는 만들 수 없습니다.
참고 항목
변수의 이름 또는 함수 및 저장 프로시저의 매개 변수는 Transact-SQL 식별자에 대한 규칙을 준수해야 합니다.
식별자 클래스
식별자의 두 가지 클래스가 있습니다.
레귤러 식별자는 식별자의 형식 규칙을 따릅니다. 레귤러 식별자는 Transact-SQL 문에 사용될 때 구분되지 않습니다.
USE AdventureWorks2022; GO SELECT * FROM HumanResources.Employee WHERE NationalIDNumber = 153479919;
구분 식별자는 큰따옴표(
"
) 또는 대괄호([
및]
)로 묶입니다. 식별자 형식 규칙을 따르는 식별자는 구분되지 않을 수도 있습니다. 예시:USE AdventureWorks2022; GO SELECT * FROM [HumanResources].[Employee] --Delimiter is optional. WHERE [NationalIDNumber] = 153479919 --Delimiter is optional.
식별자에 대한 규칙을 다 준수하지 않는 식별자는 Transact-SQL 문으로 구분해야 합니다. 예시:
USE AdventureWorks2022;
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자입니다.
레귤러 식별자에 대한 규칙
변수, 함수 및 저장 프로시저의 이름은 Transact-SQL 식별자에 대한 다음 규칙을 준수해야 합니다.
첫 문자는 다음 항목 중 하나여야 합니다.
Unicode Standard 3.2에서 정의한 문자 Unicode에서 문자란 라틴어 문자
a
~z
,A
~Z
와 타 언어의 문자를 말합니다.밑줄(
_
), @ 기호(@
) 또는 숫자 기호(#
).식별자의 시작 부분에 있는 특정 기호는 SQL Server에서 특별한 의미를 갖습니다. @ 기호로 시작하는 일반 식별자는 항상 지역 변수나 매개 변수를 표시하며 다른 개체 유형의 이름으로 사용할 수 없습니다. # 기호로 시작하는 식별자는 임시 테이블 또는 프로시저를 나타냅니다. 이중 숫자 기호(
##
)로 시작하는 식별자는 전역 임시 개체를 나타냅니다. 숫자 기호 또는 이중 숫자 기호 문자를 사용하여 다른 형식의 개체 이름을 시작할 수 있지만 이 방법은 사용하지 않는 것이 좋습니다.일부 Transact-SQL 함수에는 이중 기호(
@@
)로 시작하는 이름이 있습니다. 이러한 함수와 혼동하지 않도록@@
으로 시작하는 이름을 사용하지 않아야 합니다.
후속 문자에는 다음 목록이 포함될 수 있습니다.
Unicode Standard 3.2에서 정의한 문자
기본 라틴어 또는 기타 국가별 스크립트의 10진수입니다.
@ 기호(
@
), 달러 기호($
), 숫자 기호(#
) 또는 밑줄(_
).
식별자는 Transact-SQL 예약어여야 합니다. SQL Server는 예약어의 대문자 및 소문자 버전을 모두 예약합니다. Transact-SQL 문에서 식별자를 사용하는 경우 이러한 규칙을 준수하지 않는 식별자는 큰따옴표 또는 대괄호로 구분되어야 합니다. 예약되는 단어는 데이터베이스 호환성 수준에 따라 다릅니다. 이 수준은 ALTER DATABASE 호환성 수준 문을 사용하여 설정할 수 있습니다.
공백이나 특수 문자는 허용되지 않습니다.
보충 문자도 사용할 수 없습니다.
Transact-SQL 문에서 식별자를 사용하는 경우 이러한 규칙을 준수하지 않는 식별자는 큰따옴표 또는 대괄호로 구분되어야 합니다.
참고 항목
레귤러 식별자 형식에 대한 일부 규칙은 데이터베이스 호환성 수준에 따라 달라집니다. 이 수준은 ALTER DATABASE 호환성 수준를 사용하여 설정할 수 있습니다.
Azure SQL Database의 카탈로그 데이터 정렬
Azure SQL Database에서 논리 서버 데이터 정렬을 변경하거나 설정할 수 없습니다. 하지만 데이터베이스의 데이터 및 카탈로그에 대해 각 데이터베이스의 데이터 정렬을 별도로 구성할 수 있습니다. 카탈로그 데이터 정렬은 개체 식별자와 같은 시스템 메타데이터에 대한 데이터 정렬을 결정합니다. Azure Portal에서 데이터베이스를 만들거나 CREATE DATABASE를 사용하는 T-SQL에서 또는 New-AzSqlDatabase를 사용하는 PowerShell에서 두 데이터 정렬을 독립적으로 지정할 수 있습니다.
세부 정보와 예는 CREATE DATABASE를 참조하세요. 데이터베이스(COLLATE
)에 대한 데이터 정렬 및 시스템 메타데이터 및 개체 식별자(CATALOG_COLLATION
)에 대한 카탈로그 데이터 정렬을 지정합니다.
관련 콘텐츠
- ALTER TABLE (Transact-SQL)
- CREATE DATABASE
- CREATE DEFAULT(Transact-SQL)
- CREATE PROCEDURE(Transact-SQL)
- CREATE RULE(Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE TRIGGER(Transact-SQL)
- CREATE VIEW(Transact-SQL)
- DECLARE @local_variable (Transact-SQL)
- DELETE (Transact-SQL)
- INSERT(Transact-SQL)
- 예약어(Transact-SQL)
- SELECT (Transact-SQL)
- UPDATE(Transact-SQL)