SET QUOTED_IDENTIFIER (Transact-SQL)SET QUOTED_IDENTIFIER (Transact-SQL)

Cette rubrique s’applique à : OuiSQL Server (à partir de 2008)Ouibase de données SQL AzureOuiAzure SQL Data Warehouse Oui Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Force SQL ServerSQL Server à suivre les règles ISO se rapportant aux guillemets qui délimitent les identificateurs et les chaînes littérales.Causes SQL ServerSQL Server to follow the ISO rules regarding quotation mark delimiting identifiers and literal strings. Les identificateurs entre guillemets doubles peuvent être des mots clés réservés Transact-SQLTransact-SQL ou ils peuvent contenir des caractères généralement interdits dans les conventions de syntaxe Transact-SQLTransact-SQL concernant les identificateurs.Identifiers delimited by double quotation marks can be either Transact-SQLTransact-SQL reserved keywords or can contain characters not generally allowed by the Transact-SQLTransact-SQL syntax rules for identifiers.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

-- Syntax for SQL Server and Azure SQL Database  

SET QUOTED_IDENTIFIER { ON | OFF }  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

SET QUOTED_IDENTIFIER ON   

Notes Remarks

Si SET QUOTED_IDENTIFIER a la valeur ON, les identificateurs peuvent être délimités par des guillemets doubles et les valeurs littérales doivent être délimitées par des guillemets simples.When SET QUOTED_IDENTIFIER is ON, identifiers can be delimited by double quotation marks, and literals must be delimited by single quotation marks. Lorsque SET QUOTED_IDENTIFIER a la valeur OFF, les identificateurs ne peuvent pas apparaître entre guillemets et doivent respecter les conventions Transact-SQLTransact-SQL.When SET QUOTED_IDENTIFIER is OFF, identifiers cannot be quoted and must follow all Transact-SQLTransact-SQL rules for identifiers. Pour plus d'informations, consultez Database Identifiers.For more information, see Database Identifiers. Les chaînes littérales peuvent être délimitées par des guillemets simples ou doubles.Literals can be delimited by either single or double quotation marks.

Si SET QUOTED_IDENTIFIER a la valeur par défaut ON, toutes les chaînes délimitées par des guillemets doubles sont interprétées comme des identificateurs d'objets.When SET QUOTED_IDENTIFIER is ON (default), all strings delimited by double quotation marks are interpreted as object identifiers. Par conséquent, les identificateurs entre guillemets n'ont pas à respecter les règles Transact-SQLTransact-SQL applicables aux identificateurs.Therefore, quoted identifiers do not have to follow the Transact-SQLTransact-SQL rules for identifiers. Ils peuvent être des mots clés réservés et contenir des caractères généralement interdits dans les identificateurs Transact-SQLTransact-SQL.They can be reserved keywords and can include characters not generally allowed in Transact-SQLTransact-SQL identifiers. Les guillemets doubles ne peuvent pas servir à délimiter des expressions littérales ; seuls des guillemets simples peuvent encadrer des chaînes littérales.Double quotation marks cannot be used to delimit literal string expressions; single quotation marks must be used to enclose literal strings. Si un guillemet simple (') fait partie d’une chaîne littérale, il peut être représenté par deux guillemets simples accolés (").If a single quotation mark (') is part of the literal string, it can be represented by two single quotation marks ("). SET QUOTED_IDENTIFIER doit avoir la valeur ON si des mots clés réservés sont utilisés pour des noms d'objets dans la base de données.SET QUOTED_IDENTIFIER must be ON when reserved keywords are used for object names in the database.

Si SET QUOTED_IDENTIFIER a la valeur OFF, les chaînes littérales figurant dans les expressions peuvent être délimitées par des guillemets simples ou doubles.When SET QUOTED_IDENTIFIER is OFF, literal strings in expressions can be delimited by single or double quotation marks. Si une chaîne littérale est délimitée par des guillemets doubles, des apostrophes (guillemets simples) peuvent y être imbriquées.If a literal string is delimited by double quotation marks, the string can contain embedded single quotation marks, such as apostrophes.

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.SET QUOTED_IDENTIFIER must be ON when you are creating or changing indexes on computed columns or indexed views. Si SET QUOTED_IDENTIFIER a la valeur OFF, les instructions CREATE, UPDATE, INSERT et DELETE dans des tables comportant des index sur des colonnes calculées ou des vues indexées échouent.If SET QUOTED_IDENTIFIER is OFF, CREATE, UPDATE, INSERT, and DELETE statements on tables with indexes on computed columns or indexed views will fail. Pour plus d’informations sur les paramètres de l’option SET obligatoire avec les vues indexées et les index sur des colonnes calculées, consultez « Remarques sur l’utilisation des instructions SET » dans Instructions SET (Transact-SQL).For more information about required SET option settings with indexed views and indexes on computed columns, see "Considerations When You Use the SET Statements" in SET Statements (Transact-SQL).

SET QUOTED_IDENTIFIER doit avoir la valeur ON lorsque vous créez un index filtré.SET QUOTED_IDENTIFIER must be ON when you are creating a filtered index.

SET QUOTED_IDENTIFIER doit avoir la valeur ON lorsque vous appelez les méthodes de type de données XML.SET QUOTED_IDENTIFIER must be ON when you invoke XML data type methods.

Le pilote ODBC SQL ServerSQL Server Native Client et le fournisseur OLE DB SQL ServerSQL Server Native Client pour SQL ServerSQL Server attribuent automatiquement la valeur ON à QUOTED_IDENTIFIER lors de la connexion.The SQL ServerSQL Server Native Client ODBC driver and SQL ServerSQL Server Native Client OLE DB Provider for SQL ServerSQL Server automatically set QUOTED_IDENTIFIER to ON when connecting. 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.This can be configured in ODBC data sources, in ODBC connection attributes, or OLE DB connection properties. Dans le cas d'une connexion depuis une application DB-Library, SET QUOTED_IDENTIFIER a la valeur OFF par défaut.The default for SET QUOTED_IDENTIFIER is OFF for connections from DB-Library applications.

Lors de la création d'une table, l'option QUOTED IDENTIFIER est toujours stockée avec la valeur ON dans les métadonnées de la table, même si elle a été affectée de la valeur OFF au moment de sa création.When a table is created, the QUOTED IDENTIFIER option is always stored as ON in the table's metadata even if the option is set to OFF when the table is created.

Lors de la création d'une procédure stockée, les options de SET QUOTED_IDENTIFIER et SET ANSI_NULLS sont capturées puis réutilisées lors d'appels ultérieurs de cette procédure.When a stored procedure is created, the SET QUOTED_IDENTIFIER and SET ANSI_NULLS settings are captured and used for subsequent invocations of that stored procedure.

La valeur de SET QUOTED_IDENTIFIER ne change pas lorsqu'elle est exécutée dans une procédure stockée.When executed inside a stored procedure, the setting of SET QUOTED_IDENTIFIER is not changed.

Lorsque SET ANSI_DEFAULTS a la valeur ON, l'option SET QUOTED_IDENTIFIER est activée.When SET ANSI_DEFAULTS is ON, SET QUOTED_IDENTIFIER is enabled.

SET QUOTED_IDENTIFIER correspond aussi à l'option QUOTED_IDENTIFIER de ALTER DATABASE.SET QUOTED_IDENTIFIER also corresponds to the QUOTED_IDENTIFIER setting of ALTER DATABASE. Pour plus d’informations sur les paramètres de base de données, consultez ALTER DATABASE (Transact-SQL).For more information about database settings, see ALTER DATABASE (Transact-SQL).

SET QUOTED_IDENTIFIER prend effet au moment de l’analyse. Il affecte uniquement l’analyse, et non l’exécution des requêtes.SET QUOTED_IDENTIFIER is takes effect at parse-time and only affects parsing, not query execution.

Pour un lot ad hoc de niveau supérieur, l’analyse commence à utiliser le paramètre actuel de la session défini pour QUOTED_IDENTIFIER.For a top-level Ad-Hoc batch parsing begins using the session’s current setting for QUOTED_IDENTIFIER. Lors de l’analyse du lot, toute occurrence de SET QUOTED_IDENTIFIER change le comportement de l’analyse à partir de ce point, et enregistre ce paramètre pour la session.As the batch is parsed any occurrence of SET QUOTED_IDENTIFIER will change the parsing behavior from that point on, and save that setting for the session. Par conséquent, une fois le lot analysé et exécuté, le paramètre QUOTED_IDENTIFER de la session est défini en fonction de la dernière occurrence de SET QUOTED_IDENTIFIER dans le lot.So after the batch is parsed and executed, the session’s QUOTED_IDENTIFER setting will be set according to the last occurrence of SET QUOTED_IDENTIFIER in the batch.
Le code SQL statique d’une procédure stockée est analysée à l’aide de l’option QUOTED_IDENTIFIER en vigueur pour le lot qui a créé ou modifié la procédure stockée.Static SQL in a stored procedure is parsed using the QUOTED_IDENTIFIER setting in effect for the batch that created or altered the stored procedure. SET QUOTED_IDENTIFIER n’a aucun effet quand il apparaît dans le corps d’une procédure stockée sous forme de code SQL statique.SET QUOTED_IDENTIFIER has no effect when it appears in the body of a stored procedure as static SQL.

Pour un lot imbriqué à l’aide de sp_executesql ou exec(), l’analyse commence en utilisant l’option QUOTED_IDENTIFIER de la session.For a nested batch using sp_executesql or exec() the parsing begins using the QUOTED_IDENTIFIER setting of the session. Si le lot imbriqué se trouve à l’intérieur d’une procédure stockée, l’analyse commence en utilisant l’option QUOTED_IDENTIFIER de la procédure stockée.If the nested batch is inside a stored procedure the parsing starts using the QUOTED_IDENTIFIER setting of the stored procedure. Lors de l’analyse du lot imbriqué, toute occurrence de SET QUOTED_IDENTIFIER change le comportement de l’analyse à partir de ce point, mais le paramètre QUOTED_IDENTIFIER de la session n’est pas mis à jour.As the nested batch is parsed the any occurrence of SET QUOTED_IDENTIFIER will change the parsing behavior from that point on, but the session’s QUOTED_IDENTIFIER setting will not be updated.

L’utilisation de crochets, [ et ], pour délimiter des identificateurs n’est pas affectée par le paramètre QUOTED_IDENTIFIER.Using brackets, [ and ], to delimit identifiers is not affected by the QUOTED_IDENTIFIER setting.

Pour afficher la valeur actuelle de ce paramètre, exécutez la requête suivante.To view the current setting for this setting, run the following query.

DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';  
IF ( (256 & @@OPTIONS) = 256 ) SET @QUOTED_IDENTIFIER = 'ON';  
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;  

AutorisationsPermissions

Nécessite l'appartenance au rôle public.Requires membership in the public role.

ExemplesExamples

A.A. Utilisation de l'option QUOTED IDENTIFIER et de noms d'objets avec des mots réservésUsing the quoted identifier setting and reserved word object names

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.The following example shows that the SET QUOTED_IDENTIFIER setting must be ON, and the keywords in table names must be in double quotation marks to create and use objects that have reserved keyword names.

SET QUOTED_IDENTIFIER OFF  
GO  
-- An attempt to create a table with a reserved keyword as a name  
-- should fail.  
CREATE TABLE "select" ("identity" INT IDENTITY NOT NULL, "order" INT NOT NULL);  
GO  

SET QUOTED_IDENTIFIER ON;  
GO  

-- Will succeed.  
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.B. Utilisation de QUOTED IDENTIFIER avec des guillemets simples et doublesUsing the quoted identifier setting with single and double quotation marks

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.The following example shows the way single and double quotation marks are used in string expressions with SET QUOTED_IDENTIFIER set to ON and OFF.

SET QUOTED_IDENTIFIER OFF;  
GO  
USE AdventureWorks2012;  
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES  
      WHERE TABLE_NAME = 'Test')  
   DROP TABLE dbo.Test;  
GO  
USE AdventureWorks2012;  
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 des résultats.Here is the result set.

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

Voir aussiSee Also

CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
CREATE DEFAULT (Transact-SQL) CREATE DEFAULT (Transact-SQL)
CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
CREATE RULE (Transact-SQL) CREATE RULE (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL) CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL) CREATE VIEW (Transact-SQL)
Types de données (Transact-SQL) Data Types (Transact-SQL)
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
Instructions SET (Transact-SQL) SET Statements (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL) SET ANSI_DEFAULTS (Transact-SQL)
sp_rename (Transact-SQL)sp_rename (Transact-SQL)