SnowConvert AI - Servidor SQL - Azure Synapse - QUOTED_IDENTIFIER¶
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
Esta instrução controla se as aspas duplas são usadas para delimitar identificadores (como nomes de tabelas, nomes de colunas etc.) ou literais de cadeia de caracteres no servidor SQL. Se SET QUOTED_IDENTIFIER estiver ON, os identificadores podem ser delimitados por aspas duplas e os literais devem ser delimitados por aspas simples. Se estiver OFF, as aspas duplas são tratadas como delimitadores literais de cadeia de caracteres. Acesse SET QUOTED_IDENTIFIER para saber mais sobre esta instrução.
Sintaxe do Transact-SQL¶
SET QUOTED_IDENTIFIER { ON | OFF }
Comparação de comportamentos¶
Comportamento do servidor SQL¶
No servidor SQL, a configuração SET QUOTED_IDENTIFIER determina como as aspas duplas são interpretadas:
** Se estiver ON (padrão)**: Identificadores delimitados por aspas duplas, permitindo caracteres especiais e palavras-chave reservadas em nomes de objetos
Se estiver OFF: As aspas duplas são tratadas como delimitadores literais de cadeia de caracteres (semelhantes às aspas simples)
Comportamento do Snowflake¶
O Snowflake sempre trata aspas duplas como delimitadores identificadores (equivalentes à configuração do servidor SQL QUOTED_IDENTIFIER ON). Não há equivalente para a configuração OFF. As principais diferenças incluem:
Diferenciação entre maiúsculas e minúsculas:
Identificadores sem aspas são automaticamente convertidos em maiúsculas
Identificadores entre aspas preservam a caixa exata e há diferenciação entre maiúsculas e minúsculas
Parâmetro QUOTED_IDENTIFIERS_IGNORE_CASE: Controla a diferenciação de letras maiúsculas e minúsculas para identificadores entre aspas
Amostra de padrões da origem¶
SET QUOTED_IDENTIFIER ON¶
Se QUOTED_IDENTIFIER estiver ON no servidor SQL, as aspas duplas podem ser usadas para delimitar identificadores com espaços ou caracteres especiais.
SQL Server¶
SET QUOTED_IDENTIFIER ON;
CREATE TABLE "Order Details" (
"Order ID" INT,
"Product Name" VARCHAR(50),
"Unit Price" DECIMAL(10,2)
);
SELECT "Order ID", "Product Name" FROM "Order Details";
Snowflake¶
----** SSC-FDM-TS0033 - SET QUOTED_IDENTIFIER STATEMENT MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE **
--SET QUOTED_IDENTIFIER ON
CREATE OR REPLACE TABLE "Order Details" (
"Order ID" INT,
"Product Name" VARCHAR(50),
"Unit Price" DECIMAL(10, 2)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "transact", "convertedOn": "09/22/2025", "domain": "no-domain-provided" }}'
;
SELECT
"Order ID",
"Product Name"
FROM
"Order Details";
Exemplo de diferença
Suponha que você tenha migrado uma tabela de um banco de dados do servidor SQL com um agrupamento que não diferencia maiúsculas de minúsculas (_CI):
Servidor SQL (com agrupamento _CI):¶
-- This statement is valid
SELECT "MyColumn" FROM "MyTable";
-- This statement is also valid and returns the same result
SELECT "mycolumn" FROM "MyTable";
Neste caso, o agrupamento _CI torna as duas instruções SELECT intercambiáveis.
Snowflake:¶
-- This statement is valid
SELECT "MyColumn" FROM "MyTable";
-- This statement will fail because "mycolumn" does not match "MyColumn"
SELECT "mycolumn" FROM "MyTable";
-- ERROR: SQL compilation error: error in select clause: mycolumn does not exist
O comportamento do Snowflake é diferente porque respeita a caixa do identificador entre aspas por padrão. Isso pode ser acessado alterando a sessão.
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
Se você quiser definir o parâmetro no nível da conta, você pode usar o seguinte comando:
ALTER ACCOUNT SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
Isso definirá o parâmetro para todas as sessões associadas à conta. Para mais informações, verifique a seguinte documentação;
SET QUOTED_IDENTIFIER OFF¶
Se QUOTED_IDENTIFIER estiver OFF no servidor SQL, as aspas duplas são tratadas como delimitadores de cadeia de caracteres.
SQL Server¶
SET QUOTED_IDENTIFIER OFF;
-- Double quotes treated as string literals
SELECT * FROM customers WHERE name = "John Doe";
-- Must use square brackets for identifiers with spaces
SELECT [Order ID] FROM [Order Details];
Snowflake¶
----** SSC-FDM-TS0028 - QUOTED_IDENTIFIER OFF behavior not supported in Snowflake **
-- Double quotes always delimit identifiers in Snowflake
-- Use single quotes for string literals
SELECT * FROM customers WHERE name = 'John Doe';
-- Double quotes delimit identifiers (case-sensitive)
SELECT "Order ID" FROM "Order Details";
Considerações sobre migração¶
Revisar maiúsculas e minúsculas do identificador: Ao migrar para o Snowflake, verifique se o uso de maiúsculas e minúsculas é consistente, especialmente para identificadores entre aspas
Literais de cadeia de caracteres: Substitua literais de cadeia de caracteres entre aspas duplas por literais entre aspas simples
Use QUOTED_IDENTIFIERS_IGNORE_CASE: Considere definir esse parâmetro como
TRUEno início da migração para reduzir problemas de diferenciação entre maiúsculas e minúsculasTeste minuciosamente: Após a migração, verifique se todas as referências de objetos funcionam corretamente