SnowConvert AI - Serveur SQL-Azure Synapse - QUOTED_IDENTIFIER¶
Applies to
SQL Server
Azure Synapse Analytics
Description¶
Cette instruction contrôle si des guillemets doubles sont utilisés pour délimiter les identificateurs (tels que les noms de table, les noms de colonne, etc.) ou les littéraux de chaîne dans le serveur SQL. Lorsque SET QUOTED_IDENTIFIER est ON, les identificateurs peuvent être délimités par des guillemets doubles et les littéraux doivent être délimités par des guillemets simples. Lorsque OFF, les guillemets doubles sont traités comme des délimiteurs de littéral de chaîne. Consultez SET QUOTED_IDENTIFIER pour obtenir plus d’informations sur cette instruction.
Syntaxe Transact-SQL¶
SET QUOTED_IDENTIFIER { ON | OFF }
Comparaison des comportements¶
Comportement du serveur SQL¶
Dans le serveur SQL, le paramètre SET QUOTED_IDENTIFIER détermine comment les guillemets doubles sont interprétés :
Lorsque ON (par défaut) : Les guillemets doubles délimitent les identificateurs, permettant l’insertion de caractères spéciaux et de mots-clés réservés dans les noms d’objets
Lorsque OFF : Les guillemets doubles sont traités comme des délimiteurs de littéral de chaîne (similaire aux guillemets simples).
Comportement de Snowflake¶
Snowflake traite toujours les guillemets doubles comme des délimiteurs d’identificateur (équivalent à QUOTED_IDENTIFIER ON du serveur SQL). Il n’y a pas d’équivalent au paramètre OFF. Les différences sont les suivantes :
Sensibilité à la casse :
Les identificateurs sans guillemets sont automatiquement convertis en majuscules
Les identificateurs entre guillemets préservent la casse exacte et deviennent sensibles à la casse
Paramètre QUOTED_IDENTIFIERS_IGNORE_CASE : Contrôle la sensibilité à la casse pour les identificateurs entre guillemets
Modèles d’échantillons de sources¶
SET QUOTED_IDENTIFIER ON¶
Lorsque QUOTED_IDENTIFIER est ON dans le serveur SQL, les guillemets doubles peuvent être utilisés pour délimiter les identificateurs contenant des espaces ou des caractères spéciaux.
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";
Exemple de la différence
Supposons que vous ayez migré une table depuis une base de données de serveur SQL avec un classement insensible à la casse (_CI) :
Serveur SQL (avec classement _CI) :¶
-- This statement is valid
SELECT "MyColumn" FROM "MyTable";
-- This statement is also valid and returns the same result
SELECT "mycolumn" FROM "MyTable";
Dans ce cas, le classement _CI rend les deux instructions SELECT interchangeables.
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
Le comportement de Snowflake est différent, car il respecte par défaut la casse de l’identificateur entre guillemets. Il serait possible d’y accéder en modifiant l’utilisation de la session.
ALTER SESSION SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
Si vous souhaitez définir le paramètre au niveau du compte, vous pouvez utiliser la commande suivante :
ALTER ACCOUNT SET QUOTED_IDENTIFIERS_IGNORE_CASE = TRUE;
Le paramètre sera alors défini pour toutes les sessions associées au compte. Pour plus d’informations, consultez la [documentation] suivante (https://docs.snowflake.com/en/sql-reference/identifiers-syntax) ;
SET QUOTED_IDENTIFIER OFF¶
Lorsque QUOTED_IDENTIFIER est OFF dans le serveur SQL, les guillemets doubles sont traités comme des délimiteurs de chaîne.
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";
Remarques relatives à la migration¶
Revoir la casse des identificateurs : Vérifiez la cohérence de la casse lors de la migration vers Snowflake, en particulier pour les identificateurs entre guillemets
Littéraux de chaînes : Remplacez les littéraux de chaîne entre guillemets doubles par des littéraux entre guillemets simples
Utilisez QUOTED_IDENTIFIERS_IGNORE_CASE : Songez à définir ce paramètre sur
TRUEdès la début de la migration pour réduire les problèmes de sensibilité à la casseEffectuez des tests avancés : Vérifiez que toutes les références d’objets fonctionnent correctement après la migration