적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
분석 플랫폼 시스템(PDW)
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 웨어하우스
Microsoft Fabric의 SQL 데이터베이스
SQL Server가 인용 부호 구분 식별자 및 리터럴 문자열에 관해 ISO 규칙을 따르도록 합니다. 큰따옴표로 구분된 식별자는 Transact-SQL 예약 키워드이거나 Transact-SQL 식별자 규칙 구문에서 일반적으로 허용하지 않는 문자를 포함할 수 있습니다.
구문
SQL Server, Azure SQL Database, Azure Synapse Analytics의 서버리스 SQL 풀 및 Microsoft Fabric에 대한 구문입니다.
SET QUOTED_IDENTIFIER { ON | OFF }
Azure Synapse Analytics 및 병렬 데이터 웨어하우스에 대한 구문입니다.
SET QUOTED_IDENTIFIER ON
설명
이 SET QUOTED_IDENTIFIER 경우ON(기본값) 식별자는 큰따옴표("")로 구분할 수 있으며 리터럴은 작은따옴표('')로 구분되어야 합니다. 큰따옴표로 구분되는 모든 문자열은 개체 식별자로 해석됩니다. 따옴표 붙은 식별자는 Transact-SQL 식별자 규칙을 따르지 않아도 됩니다. 따옴표 붙은 식별자는 키워드일 수 있으며, Transact-SQL 식별자에서 허용되지 않는 문자를 포함할 수 있습니다. 큰따옴표(")가 식별자의 일부인 경우 두 개의 큰따옴표("")로 나타낼 수 있습니다.
SET QUOTED_IDENTIFIER
ON 는 데이터베이스의 개체 이름에 예약 키워드를 사용하는 경우여야 합니다.
이 경우 SET QUOTED_IDENTIFIEROFF식별자를 따옴표로 묶을 수 없으며 식별자에 대한 모든 Transact-SQL 규칙을 따라야 합니다. 자세한 내용은 데이터베이스 식별자를 참조 하세요. 리터럴은 작은따옴표 또는 큰따옴표로 구분할 수 있습니다. 리터럴 문자열을 큰따옴표로 구분할 때 아포스트로피와 같은 작은따옴표가 들어갈 수 있습니다.
참고 항목
QUOTED_IDENTIFIER 는 대괄호([ 및 ])로 묶인 구분된 식별자에 영향을 주지 않습니다.
계산 열이나 인덱싱된 뷰에서 인덱스를 만들거나 변경하는 경우 SET QUOTED_IDENTIFIER를 ON으로 설정해야 합니다. 이면 SET QUOTED_IDENTIFIER 계산 OFFCREATEUPDATEINSERT열에 인덱스가 있는 테이블 또는 인덱싱된 뷰가 있는 테이블에서 문이 실패합니다.DELETE 계산 열에서 인덱싱된 뷰 및 인덱스가 있는 필수 SET 옵션 설정에 대한 자세한 내용은 SET 문을 사용할 때 고려 사항을 참조 하세요.
SET QUOTED_IDENTIFIER
ON 는 필터링된 인덱스 생성 시여야 합니다.
SET QUOTED_IDENTIFIER
ON 는 xml 데이터 형식 메서드를 호출할 때여야 합니다.
연결할 때 SQL Server Native Client ODBC 드라이버 및 SQL Server Native Client OLE DB Provider for SQL Server가 QUOTED_IDENTIFIER 자동으로 설정 ON 됩니다. ODBC 데이터 원본과 ODBC 연결 특성 또는 OLE DB 연결 특성에서 이 옵션을 구성할 수 있습니다. 기본값 SET QUOTED_IDENTIFIER 은 OFF DB-Library 애플리케이션의 연결에 대한 것입니다.
테이블이 만들어지면 테이블이 만들어 QUOTED IDENTIFIER 질 때 옵션이 설정된 경우에도 항상 테이블의 메타데이터와 ON 같이 OFF 옵션이 저장됩니다.
저장 프로시저를 만들 SET QUOTED_IDENTIFIER 면 해당 SET ANSI_NULLS 저장 프로시저의 후속 호출에 대한 설정과 설정이 캡처되고 사용됩니다.
저장 프로시저 내에서 실행되는 경우 설정 SET QUOTED_IDENTIFIER 은 변경되지 않습니다.
때 SET ANSI_DEFAULTS 는 ON, QUOTED_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 VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
사용 권한
public 역할의 멤버 자격이 필요합니다.
예제
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 AdventureWorks2022;
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Test')
DROP TABLE dbo.Test;
GO
USE AdventureWorks2022;
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)
- CREATE PROCEDURE(Transact-SQL)
- CREATE RULE(Transact-SQL)
- CREATE TABLE(Transact-SQL)
- CREATE TRIGGER(Transact-SQL)
- CREATE VIEW(Transact-SQL)
- 데이터 형식(Transact-SQL)
- EXECUTE(Transact-SQL)
- SELECT(Transact-SQL)
- SET 문(Transact-SQL)
- SET ANSI_DEFAULTS(Transact-SQL)
- sp_rename
- 데이터베이스 식별자