Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric
Zorgt ervoor dat SQL Server de ISO-regels volgt met betrekking tot aanhalingstekens en letterlijke strings. Identifiers die door dubbele aanhalingstekens worden gescheiden, kunnen ofwel Transact-SQL gereserveerde trefwoorden zijn of karakters bevatten die doorgaans niet zijn toegestaan door de Transact-SQL syntaxisregels voor identifiers.
Transact-SQL syntaxis-conventies
Syntaxis
Syntax voor SQL Server, Azure SQL Database, serverless SQL pool in Azure Synapse Analytics en Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Syntaxis voor Azure Synapse Analytics en Parallel Data Warehouse.
SET QUOTED_IDENTIFIER ON
Opmerkingen
Wanneer SET QUOTED_IDENTIFIER is ON (standaard), kunnen identifiers worden gescheiden door dubbele aanhalingstekens (""), en literalen moeten worden afgebakend met enkele aanhalingstekens (''). Alle strings die door dubbele aanhalingstekens worden geïnterpreteerd als objectidentificaties. Aangegeven identificaties hoeven niet de Transact-SQL regels voor identificaties te volgen. Ze kunnen trefwoorden zijn en kunnen tekens bevatten die niet in Transact-SQL identificaties zijn toegestaan. Als een dubbele aanhalingstekens (") deel uitmaakt van de identificatie, kan deze worden weergegeven door twee dubbele aanhalingstekens ("").
SET QUOTED_IDENTIFIER moet het moment zijn ON waarop gereserveerde trefwoorden worden gebruikt voor objectnamen in de database.
Wanneer SET QUOTED_IDENTIFIER , OFFkunnen identificatoren niet worden geciteerd en moeten ze alle Transact-SQL regels voor identificaties volgen. Zie Database-id's voor meer informatie. Letterlijke kunnen worden afgebakend door enkelvoudige of dubbele aanhalingstekens. Als een letterlijke string wordt afgebakend door dubbele aanhalingstekens, kan de string ingebedde enkele aanhalingstekens bevatten, zoals apostroffen.
Opmerking
QUOTED_IDENTIFIER beïnvloedt geen afgebakende identificaties die tussen haakjes staan ([ en ]).
SET QUOTED_IDENTIFIER moet worden ON wanneer u indexen maakt of wijzigt in berekende kolommen of geïndexeerde weergaven. Als SET QUOTED_IDENTIFIEROFF, dan CREATEfalen , UPDATE, INSERT, en DELETE de instructies op tabellen met indexen op berekende kolommen, of tabellen met geïndexeerde weergaven. Voor meer informatie over de vereiste SET optie-instellingen met geïndexeerde weergaven en indexen op berekende kolommen, zie Overwegingen wanneer je de SET-instructies gebruikt.
SET QUOTED_IDENTIFIER Dat moet zijn ON wanneer je een gefilterde index maakt.
SET QUOTED_IDENTIFIER Dat moet zijn ON wanneer je XML-datatypemethoden aanroept.
De SQL Server Native Client ODBC-driver en de SQL Server Native Client OLE DB Provider voor SQL Server worden automatisch ingesteld QUOTED_IDENTIFIER op ON bij het verbinden. Dit kan worden geconfigureerd in ODBC-databronnen, in ODBC-verbindingsattributen of OLE DB-verbindingseigenschappen. De standaard voor SET QUOTED_IDENTIFIER is OFF voor verbindingen van DB-Library applicaties.
Wanneer een tabel wordt aangemaakt, wordt de QUOTED IDENTIFIER optie altijd opgeslagen zoals ON in de metadata van de tabel, zelfs als de optie is ingesteld op het moment dat OFF de tabel wordt aangemaakt.
Wanneer een opgeslagen procedure wordt aangemaakt, worden de SET QUOTED_IDENTIFIER en SET ANSI_NULLS instellingen vastgelegd en gebruikt voor latere aanroepen van die opgeslagen procedure.
Wanneer deze wordt uitgevoerd binnen een opgeslagen procedure, wordt de instelling van SET QUOTED_IDENTIFIER niet gewijzigd.
Wanneer SET ANSI_DEFAULTS is ON, QUOTED_IDENTIFIER is ook ON.
SET QUOTED_IDENTIFIERkomt overeen met de QUOTED_IDENTIFIER setting van ALTER DATABASE.
SET QUOTED_IDENTIFIER treedt in werking bij Transact-SQL parse-tijd en beïnvloedt alleen parsing, niet queryoptimalisatie of query-uitvoering.
Voor een topniveau ad hoc batch begint parsen met de huidige instelling van de sessie voor QUOTED_IDENTIFIER. Naarmate de batch wordt geanalyseerd, verandert elke gebeurtenis het SET QUOTED_IDENTIFIER parsinggedrag vanaf dat punt, en sla die instelling op voor de sessie. Dus nadat de batch is geparsed en uitgevoerd, wordt de QUOTED_IDENTIFIER instelling van de sessie ingesteld op basis van het laatste voorkomen van SET QUOTED_IDENTIFIER in de batch.
Statische Transact-SQL in een opgeslagen procedure wordt geanalyseerd met behulp van de QUOTED_IDENTIFIER instelling die geldt voor de batch die de opgeslagen procedure heeft gemaakt of aangepast.
SET QUOTED_IDENTIFIER geen effect heeft wanneer het in de inhoud van een opgeslagen procedure verschijnt als statische Transact-SQL.
Voor een geneste batch met sp_executesql of exec(), begint de parsing met de QUOTED_IDENTIFIER instelling van de sessie. Als de geneste batch zich in een opgeslagen procedure bevindt, begint parsing met de QUOTED_IDENTIFIER instelling van de opgeslagen procedure. Naarmate de geneste batch wordt geanalyseerd, verandert elke gebeurtenis van SET QUOTED_IDENTIFIER het parsingsgedrag vanaf dat punt, maar de QUOTED_IDENTIFIER instelling van de sessie wordt niet bijgewerkt.
Om de huidige instelling voor deze instelling te bekijken, voer je de volgende zoekopdracht uit:
DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Permissions
Vereist lidmaatschap van de openbare rol.
Voorbeelden
Eén. Gebruik de instelling voor aanhalingstekens en objectnamen van gereserveerde woorden
Het volgende voorbeeld toont aan dat de SET QUOTED_IDENTIFIER instelling moet zijn ON, en dat de trefwoorden in tabelnamen dubbele aanhalingstekens moeten hebben om objecten te creëren en te gebruiken die gereserveerde trefwoordnamen hebben.
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. Gebruik de instelling voor aanhalingstekens met enkele en dubbele aanhalingstekens
Het volgende voorbeeld toont hoe enkele en dubbele aanhalingstekens worden gebruikt in stringexpressies met SET QUOTED_IDENTIFIER gezet op ON en 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
Hier is het resultatenoverzicht.
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
Verwante inhoud
- Een DATABASE maken
- STANDAARD MAKEN (Transact-SQL)
- PROCEDURE MAKEN (Transact-SQL)
- REGEL MAKEN (Transact-SQL)
- MAAK TABEL AAN (Transact-SQL)
- MAAK TRIGGER (Transact-SQL)
- WEERGAVE MAKEN (Transact-SQL)
- Gegevenstypen (Transact-SQL)
- UITVOEREN (Transact-SQL)
- SELECT (Transact-SQL)
- SET-instructies (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Database-id's