SET QUOTED_IDENTIFIER (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) SQL analytics endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Force SQL Server à suivre les règles ISO se rapportant aux guillemets qui délimitent les identificateurs et les chaînes littérales. Les identificateurs entre guillemets doubles peuvent être des mots clés réservés Transact-SQL ou ils peuvent contenir des caractères généralement interdits dans les conventions de syntaxe Transact-SQL concernant les identificateurs.
Conventions de la syntaxe Transact-SQL
Syntaxe
Syntaxe pour SQL Server, Azure SQL Database, pool SQL serverless dans Azure Synapse Analytics et Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Syntaxe pour Azure Synapse Analytics et Parallel Data Warehouse.
SET QUOTED_IDENTIFIER ON
Notes
Quand SET QUOTED_IDENTIFIER
est ON
(valeur par défaut), les identificateurs peuvent être délimités par des guillemets doubles (""
), et les littéraux doivent être délimités par des guillemets simples (''
). Toutes les chaînes délimitées par des guillemets doubles sont considérées comme des identificateurs d'objet. Les identificateurs entre guillemets n’ont pas à respecter les règles Transact-SQL propres aux identificateurs. Ils peuvent être des mots clés et contenir des caractères non autorisés dans les identificateurs Transact-SQL. Si un guillemet double ("
) fait partie de l’identificateur, il peut être représenté par deux guillemets doubles (""
). SET QUOTED_IDENTIFIER
doit être ON
lorsque des mots clés réservés sont utilisés pour les noms d’objets dans la base de données.
Quand SET QUOTED_IDENTIFIER
c’est OFF
le cas, les identificateurs ne peuvent pas être entre guillemets et doivent suivre toutes les règles Transact-SQL pour les identificateurs. Pour plus d’informations, consultez Identificateurs de base de données. Les chaînes littérales peuvent être délimitées par des guillemets simples ou doubles. Si une chaîne littérale est délimitée par des guillemets doubles, des apostrophes (guillemets simples) peuvent y être imbriquées.
Remarque
QUOTED_IDENTIFIER
n’affecte pas les identificateurs délimités entre crochets ([
et ]
).
SET QUOTED_IDENTIFIER
doit avoir la valeur ON
lors de la création ou de la modification d’index dans des colonnes calculées ou des vues indexées. Si SET QUOTED_IDENTIFIER
c’est OFF
le cas , alors CREATE
, UPDATE
, INSERT
et DELETE
les instructions échouent sur les tables avec des index sur des colonnes calculées ou des tables avec des vues indexées. Pour plus d’informations sur les paramètres d’option requis SET
avec des vues indexées et des index sur des colonnes calculées, consultez Considérations relatives à l’utilisation des instructions SET.
SET QUOTED_IDENTIFIER
doit être ON
lorsque vous créez un index filtré.
SET QUOTED_IDENTIFIER
doit être ON
lorsque vous appelez des méthodes de type de données xml .
Le pilote ODBC SQL Server Native Client et le fournisseur OLE DB SQL Server Native Client pour SQL Server sont automatiquement définis QUOTED_IDENTIFIER
ON
lors de la connexion. Cette option peut être configurée dans les sources de données et les attributs de connexion ODBC, ainsi que dans les propriétés de connexion OLE DB. La valeur par défaut SET QUOTED_IDENTIFIER
concerne OFF
les connexions à partir d’applications de bibliothèque de bases de données.
Lorsqu’une table est créée, l’option QUOTED IDENTIFIER
est toujours stockée comme ON
dans les métadonnées de la table, même si l’option est définie OFF
lorsque la table est créée.
Lorsqu’une procédure stockée est créée, les SET QUOTED_IDENTIFIER
paramètres et SET ANSI_NULLS
les paramètres sont capturés et utilisés pour les appels suivants de cette procédure stockée.
Lors de l’exécution à l’intérieur d’une procédure stockée, le paramètre de SET QUOTED_IDENTIFIER
n’est pas modifié.
Quand SET ANSI_DEFAULTS
c’est ON
, QUOTED_IDENTIFIER
est aussi ON
.
SET QUOTED_IDENTIFIER
correspond au QUOTED_IDENTIFIER
paramètre d’ALTER DATABASE.
SET QUOTED_IDENTIFIER
prend effet au moment de l’analyse Transact-SQL. Il affecte uniquement l’analyse et ni l’optimisation ni l’exécution des requêtes.
Pour un lot ad hoc de niveau supérieur, l’analyse commence à utiliser le paramètre actuel de la session pour QUOTED_IDENTIFIER
. À mesure que le lot est analysé toute occurrence de modification du comportement d’analyse SET QUOTED_IDENTIFIER
à partir de ce point, puis enregistrez ce paramètre pour la session. Par conséquent, une fois le lot analysé et exécuté, le paramètre de QUOTED_IDENTIFIER
la session est défini en fonction de la dernière occurrence du SET QUOTED_IDENTIFIER
lot.
Transact-SQL statique dans une procédure stockée est analysé à l’aide du QUOTED_IDENTIFIER
paramètre en vigueur pour le lot qui a créé ou modifié la procédure stockée. SET QUOTED_IDENTIFIER
n’a aucun effet quand il apparaît dans le corps d’une procédure stockée sous forme statique Transact-SQL.
Pour un lot imbriqué à l’aide de sp_executesql ou exec()
, l’analyse commence à utiliser le QUOTED_IDENTIFIER
paramètre de la session. Si le lot imbriqué se trouve à l’intérieur d’une procédure stockée, l’analyse commence à utiliser le QUOTED_IDENTIFIER
paramètre de la procédure stockée. À mesure que le lot imbriqué est analysé, toute occurrence de modification du comportement d’analyse SET QUOTED_IDENTIFIER
à partir de ce point, mais le paramètre de QUOTED_IDENTIFIER
la session n’est pas mis à jour.
Pour afficher la valeur actuelle de ce paramètre, exécutez la requête suivante :
DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Autorisations
Nécessite l'appartenance au rôle public .
Exemples
R. Utiliser le paramètre d’identificateur entre guillemets et les noms d’objets word réservés
L'exemple suivant montre que l'option SET QUOTED_IDENTIFIER
doit être ON
, et les mots clés figurant dans les noms de tables doivent être placés entre guillemets doubles pour pouvoir créer et utiliser des objets dont les noms sont des mots clés réservés.
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. Utiliser le paramètre d’identificateur entre guillemets avec des guillemets simples et doubles
L'exemple suivant montre comment utiliser les guillemets simples et doubles dans des chaînes, lorsque SET QUOTED_IDENTIFIER
a la valeur ON
et 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
Voici le jeu de résultats.
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
Contenu connexe
- 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)
- Types de données (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- Instructions SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Identificateurs de base de données