SET QUOTED_IDENTIFIER (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric
Faz com que o SQL Server siga as regras ISO relativas às aspas que delimitam identificadores e cadeias de caracteres literais. Identificadores delimitados por aspas duplas podem ser palavras-chave reservadas Transact-SQL ou podem conter caracteres que nem sempre são permitidos pelas regras da sintaxe Transact-SQL para identificadores.
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe para SQL Server, Banco de Dados SQL do Azure, pool de SQL sem servidor no Azure Synapse Analytics e Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Sintaxe para Azure Synapse Analytics e Parallel Data Warehouse.
SET QUOTED_IDENTIFIER ON
Comentários
Quando SET QUOTED_IDENTIFIER
é ON
(padrão), os identificadores podem ser delimitados por aspas duplas (""
) e os literais devem ser delimitados por aspas simples (''
). Todas as cadeias de caracteres delimitadas por aspas duplas são interpretadas como identificadores de objeto. Os identificadores entre aspas não precisam seguir as regras Transact-SQL para identificadores. Eles podem ser palavras-chave e incluir caracteres não permitidos nos identificadores Transact-SQL. Se uma aspa dupla ("
) fizer parte do identificador, ela poderá ser representada por duas aspas duplas (""
). SET QUOTED_IDENTIFIER
deve ser ON
quando palavras-chave reservadas são usadas para nomes de objetos no banco de dados.
Quando SET QUOTED_IDENTIFIER
é OFF
, os identificadores não podem ser citados e devem seguir todas as regras Transact-SQL para identificadores. Para obter mais informações, consulte Identificadores de banco de dados. Literais podem ser delimitados por aspas simples ou duplas. Se uma cadeia de caracteres literal estiver delimitada por aspas duplas, a cadeia de caracteres poderá conter aspas simples inseridas, como apóstrofos.
Observação
QUOTED_IDENTIFIER
não afeta os identificadores delimitados entre colchetes ([
e ]
).
SET QUOTED_IDENTIFIER
precisará ser ON
ao criar ou alterar índices em colunas computadas ou exibições indexadas. Se SET QUOTED_IDENTIFIER
for OFF
, então CREATE
, , UPDATE
, INSERT
e DELETE
e as instruções falham em tabelas com índices em colunas computadas ou tabelas com exibições indexadas. Para obter mais informações sobre as configurações de opção necessárias SET
com exibições indexadas e índices em colunas computadas, consulte Considerações ao usar as instruções SET.
SET QUOTED_IDENTIFIER
deve ser ON
quando você estiver criando um índice filtrado.
SET QUOTED_IDENTIFIER
deve ser ON
quando você invoca métodos de tipo de dados XML .
O driver ODBC do SQL Server Native Client e o Provedor OLE DB do SQL Server Native Client para SQL Server são definidos QUOTED_IDENTIFIER
automaticamente ao ON
se conectar. Isso pode ser configurado em fontes de dados ODBC, em atributos de conexão ODBC ou em propriedades de conexão OLE DB. O padrão for SET QUOTED_IDENTIFIER
é OFF
para conexões de aplicativos de biblioteca de banco de dados.
Quando uma tabela é criada, a QUOTED IDENTIFIER
opção é sempre armazenada como ON
nos metadados da tabela, mesmo que a opção seja definida como OFF
quando a tabela é criada.
Quando um procedimento armazenado é criado, as SET QUOTED_IDENTIFIER
configurações and SET ANSI_NULLS
são capturadas e usadas para invocações subsequentes desse procedimento armazenado.
Quando executado dentro de um procedimento armazenado, a configuração de SET QUOTED_IDENTIFIER
não é alterada.
Quando SET ANSI_DEFAULTS
é ON
, QUOTED_IDENTIFIER
também ON
é .
SET QUOTED_IDENTIFIER
corresponde à QUOTED_IDENTIFIER
configuração de ALTER DATABASE.
SET QUOTED_IDENTIFIER
entra em vigor no momento da análise Transact-SQL e afeta apenas a análise, não a otimização de consulta nem a execução da consulta.
Para um lote ad hoc de nível superior, a análise começa usando a configuração atual da sessão para QUOTED_IDENTIFIER
. À medida que o lote é analisado, qualquer ocorrência altera SET QUOTED_IDENTIFIER
o comportamento de análise desse ponto em diante e salva essa configuração para a sessão. Assim, depois que o lote for analisado e executado, a configuração da QUOTED_IDENTIFIER
sessão será definida de acordo com a última ocorrência de SET QUOTED_IDENTIFIER
no lote.
O Transact-SQL estático em um procedimento armazenado é analisado usando a QUOTED_IDENTIFIER
configuração em vigor para o lote que criou ou alterou o procedimento armazenado. SET QUOTED_IDENTIFIER
não tem efeito quando aparece no corpo de um procedimento armazenado como Transact-SQL estático.
Para um lote aninhado usando sp_executesql ou exec()
, a análise começa usando a QUOTED_IDENTIFIER
configuração da sessão. Se o lote aninhado estiver dentro de um procedimento armazenado, a análise começará usando a QUOTED_IDENTIFIER
configuração do procedimento armazenado. À medida que o lote aninhado é analisado, qualquer ocorrência de SET QUOTED_IDENTIFIER
altera o comportamento de análise desse ponto em diante, mas a configuração da QUOTED_IDENTIFIER
sessão não é atualizada.
Para exibir a configuração atual dessa configuração, execute a seguinte consulta:
DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Permissões
Requer associação à função pública .
Exemplos
R. Usar a configuração do identificador entre aspas e os nomes de objetos de palavras reservados
O exemplo a seguir mostra que a configuração de SET QUOTED_IDENTIFIER
deve estar ON
, e as palavras-chave em nomes de tabelas devem estar entre aspas duplas para criar e usar objetos que têm nomes de palavras-chave reservados.
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. Use a configuração do identificador entre aspas simples e duplas
O exemplo a seguir mostra a maneira como aspas simples e duplas são usadas em expressões de cadeias de caracteres com SET QUOTED_IDENTIFIER
dedinido como ON
e 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
Veja a seguir o conjunto de resultados.
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
Conteúdo relacionado
- 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)
- Tipos de dados (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- Instruções SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Identificadores de banco de dados