QUOTED_IDENTIFIER 설정을 사용하면 SQL Server 따옴표자료 식별자 및 리터럴 문자열에 대한 ISO 규칙을 따릅니다. 큰따옴표를 사용하여 식별자를 구분하는 경우 Transact-SQL 예약된 키워드를 사용하거나 Transact-SQL 구문 규칙이 일반적으로 식별자에서 허용하지 않는 문자를 포함할 수 있습니다.
구문
Azure Synapse Analytics SQL Server, Azure SQL Database, 서버리스 SQL 풀 및 Microsoft Fabric 구문입니다.
SET QUOTED_IDENTIFIER { ON | OFF }
Azure Synapse Analytics 및 병렬 Data Warehouse 구문입니다.
SET QUOTED_IDENTIFIER ON
설명
기본값으로 ON 설정 SET QUOTED_IDENTIFIER 하면 큰따옴표("")를 사용하여 식별자를 구분할 수 있으며, 작은따옴표('')를 사용하여 리터럴을 구분해야 합니다. 큰따옴표로 묶인 모든 문자열은 개체 식별자로 해석됩니다. 따옴표 붙은 식별자는 식별자에 대한 Transact-SQL 규칙을 따를 필요가 없습니다. 키워드일 수 있으며 Transact-SQL 식별자에 허용되지 않는 문자를 포함할 수 있습니다. 큰따옴표(")가 식별자의 일부인 경우 두 개의 큰따옴표("")로 나타낼 수 있습니다. 데이터베이스의 개체 이름에 ON 예약된 키워드를 사용할 때로 설정 SET QUOTED_IDENTIFIER 해야 합니다.
SET QUOTED_IDENTIFIER
OFF 설정하면 식별자를 인용할 수 없으며 식별자에 대한 모든 Transact-SQL 규칙을 따라야 합니다. 자세한 내용은 데이터베이스 식별자를 참조 하세요. 리터럴을 작은따옴표나 큰따옴표로 구분할 수 있습니다. 리터럴 문자열을 큰따옴표로 구분하면 아포스트로피와 같은 작은따옴표가 포함될 수 있습니다.
참고 항목
QUOTED_IDENTIFIER 는 대괄호([ 및 ])로 묶인 구분된 식별자에 영향을 주지 않습니다.
계산 열 또는 인덱싱된 뷰에서 인덱스를 만들거나 변경할 때로 설정 SET QUOTED_IDENTIFIERON 해야 합니다. 계산 열의 인덱스가 있는 OFFCREATE테이블 또는 인덱싱된 뷰가 있는 테이블에서 , , INSERTUPDATE및 DELETE 문으로 설정 SET QUOTED_IDENTIFIER 하면 실패합니다. 계산 열에서 인덱싱된 뷰 및 인덱스가 있는 필수 SET 옵션 설정에 대한 자세한 내용은 SET 문을 사용할 때 고려 사항을 참조 하세요.
필터링된 인덱스 ON 만들 때로 설정 SET QUOTED_IDENTIFIER 해야 합니다.
xml 데이터 형식 메서드를 호출할 ON 때로 설정 SET QUOTED_IDENTIFIER 해야 합니다.
SQL Server Native Client ODBC 드라이버 및 SQL Server Native Client OLE DB Provider for SQL Server 연결할 때 QUOTED_IDENTIFIERON 자동으로 설정합니다. ODBC 데이터 원본, ODBC 연결 특성 또는 OLE DB 연결 속성에서 이 설정을 구성할 수 있습니다. 기본값 SET QUOTED_IDENTIFIER 은 OFF DB-Library 애플리케이션의 연결에 대한 것입니다.
테이블을 만들 때 테이블을 만들 때 옵션을 ON 설정한 경우에도 테이블의 메타데이터는 항상 옵션을 OFF 저장 QUOTED_IDENTIFIER 합니다.
저장 프로시저를 만들 때 해당 저장 프로시저의 SET QUOTED_IDENTIFIER 후속 호출에 해당 설정 SET ANSI_NULLS 이 캡처되고 사용됩니다.
저장 프로시저 내에서 실행 SET QUOTED_IDENTIFIER 하면 설정이 변경되지 않습니다.
로 설정 SET ANSI_DEFAULTSONQUOTED_IDENTIFIER 하면 으로도 설정됩니다.ON
SET QUOTED_IDENTIFIER 는 ALTER DATABASE의 설정에 QUOTED_IDENTIFIER해당합니다.
SET QUOTED_IDENTIFIER Transact-SQL 구문 분석 시간에 적용되며 쿼리 최적화 또는 쿼리 실행이 아닌 구문 분석에만 영향을 줍니다.
최상위 임시 일괄 처리의 경우 구문 분석에서 세션의 현재 설정을 QUOTED_IDENTIFIER사용합니다. 일괄 처리가 구문 분석되면 해당 SET QUOTED_IDENTIFIER 지점에서 구문 분석 동작이 변경되고 세션에 대한 해당 설정이 저장됩니다. 따라서 일괄 처리가 구문 분석되고 실행된 후 세션의 QUOTED_IDENTIFIER 설정은 일괄 처리에서 마지막으로 발생한 항목 SET QUOTED_IDENTIFIER 에 따라 설정됩니다.
저장 프로시저의 정적 Transact-SQL 저장 프로시저를 만들거나 변경한 일괄 처리에 적용되는 QUOTED_IDENTIFIER 설정을 사용하여 구문 분석됩니다.
SET QUOTED_IDENTIFIER 저장 프로시저 본문에 정적 Transact-SQL 표시될 때 아무런 영향을 주지 않습니다.
sp_executesql 사용하는 중첩 일괄 처리의 exec()경우 구문 분석이 QUOTED_IDENTIFIER 세션의 설정을 사용하기 시작합니다. 중첩된 일괄 처리가 저장 프로시저 내에 있는 경우 구문 분석이 저장 프로시저의 설정을 사용하기 QUOTED_IDENTIFIER 시작합니다. 중첩된 일괄 처리가 구문 분석되면 해당 시점의 SET QUOTED_IDENTIFIER 구문 분석 동작이 변경되지만 세션의 QUOTED_IDENTIFIER 설정은 업데이트되지 않습니다.
이 설정에 대한 현재 설정을 보려면 다음 쿼리를 실행합니다.
DECLARE @QUOTED_IDENTIFIER AS VARCHAR (3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
사용 권한
공용 고정 데이터베이스 역할의 멤버 자격이 필요합니다.
예제
A. 따옴표 붙은 식별자 설정 및 예약된 단어 개체 이름 사용
다음 예제에서는 SET QUOTED_IDENTIFIER 설정이 ON있어야 하며 테이블 이름의 키워드는 큰따옴표로 되어 있어야 예약된 키워드 이름의 개체를 만들고 사용할 수 있습니다.
SET QUOTED_IDENTIFIER OFF;
GO
-- Create statement fails.
CREATE TABLE "select"
(
"identity" INT IDENTITY NOT NULL,
"order" INT NOT NULL
);
GO
SET QUOTED_IDENTIFIER ON;
GO
-- Create statement succeeds.
CREATE TABLE "select"
(
"identity" INT IDENTITY NOT NULL,
"order" INT NOT NULL
);
GO
SELECT "identity",
"order"
FROM "select"
ORDER BY "order";
GO
DROP TABLE "SELECT";
GO
SET QUOTED_IDENTIFIER OFF;
GO
B. 작은따옴표와 큰따옴표로 따옴표 붙은 식별자 설정 사용
다음 예제에서는 문자열 식 SET QUOTED_IDENTIFIER 에서 작은따옴표와 큰따옴표가 사용되는 ON 방법을 보여 줍니다 OFF.
SET QUOTED_IDENTIFIER OFF;
GO
USE AdventureWorks2025;
GO
IF EXISTS (SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Test')
DROP TABLE dbo.Test;
GO
USE AdventureWorks2025;
GO
CREATE TABLE dbo.Test
(
ID INT,
String VARCHAR (30)
);
GO
-- Literal strings can be in single or double quotation marks.
INSERT INTO dbo.Test
VALUES (1, "'Text in single quotes'");
INSERT INTO dbo.Test
VALUES (2, '''Text in single quotes''');
INSERT INTO dbo.Test
VALUES (3, 'Text with 2 '''' single quotes');
INSERT INTO dbo.Test
VALUES (4, '"Text in double quotes"');
INSERT INTO dbo.Test
VALUES (5, """Text in double quotes""");
INSERT INTO dbo.Test
VALUES (6, "Text with 2 """" double quotes");
GO
SET QUOTED_IDENTIFIER ON;
GO
-- Strings inside double quotation marks are now treated
-- as object names, so they cannot be used for literals.
INSERT INTO dbo."Test"
VALUES (7, 'Text with a single '' quote');
GO
-- Object identifiers do not have to be in double quotation marks
-- if they are not reserved keywords.
SELECT ID,
String
FROM dbo.Test;
GO
DROP TABLE dbo.Test;
GO
SET QUOTED_IDENTIFIER OFF;
GO
결과 집합은 다음과 같습니다.
ID String
----------- ------------------------------
1 'Text in single quotes'
2 'Text in single quotes'
3 Text with 2 '' single quotes
4 "Text in double quotes"
5 "Text in double quotes"
6 Text with 2 "" double quotes
7 Text with a single ' quote
관련 콘텐츠
- 데이터베이스 생성
- CREATE DEFAULT(Transact-SQL)
TRANSACT-SQL) - TRANSACT-SQL)
TRANSACT-SQL) - CREATE TRIGGER(Transact-SQL)
TRANSACT-SQL) - 데이타 형식(Transact-SQL)
- EXECUTE(Transact-SQL)
- SELECT(Transact-SQL)
- SET 문(Transact-SQL)
- SET ANSI_DEFAULTS(Transact-SQL)
- sp_rename
- 데이터베이스 식별자