Delen via


SET QUOTED_IDENTIFIER (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analyseeindpunt in Microsoft FabricWarehouse in Microsoft FabricSQL-database in Microsoft Fabric

De instelling QUOTED_IDENTIFIER zorgt ervoor dat SQL Server de ISO-regels voor aanhalingstekens scheidingstekens en letterlijke tekenreeksen volgt. Als u dubbele aanhalingstekens gebruikt om id's te scheiden, kunt u Transact-SQL gereserveerde trefwoorden gebruiken of tekens opnemen die de Transact-SQL syntaxisregels meestal niet toestaan in id's.

Transact-SQL syntaxisconventies

Syntaxis

Syntaxis voor SQL Server, Azure SQL Database, serverloze SQL-pool in Azure Synapse Analytics en Microsoft Fabric.

SET QUOTED_IDENTIFIER { ON | OFF }

Syntaxis voor Azure Synapse Analytics en parallelle Data Warehouse.

SET QUOTED_IDENTIFIER ON

Opmerkingen

Wanneer u op (de standaardinstelling) instelt SET QUOTED_IDENTIFIERON , kunt u dubbele aanhalingstekens ("") gebruiken om id's te scheiden en moet u enkele aanhalingstekens ('') gebruiken om letterlijke tekens te scheiden. Alle tekenreeksen tussen dubbele aanhalingstekens worden geïnterpreteerd als object-id's. Id's tussen aanhaatjes hoeven niet de Transact-SQL regels voor id's te volgen. Dit kunnen trefwoorden zijn en tekens bevatten die niet zijn toegestaan in Transact-SQL id's. Als een dubbel aanhalingsteken (") deel uitmaakt van de id, kunt u deze weergeven door twee dubbele aanhalingstekens (""). U moet instellen SET QUOTED_IDENTIFIER op ON wanneer u gereserveerde trefwoorden gebruikt voor objectnamen in de database.

Wanneer u SET QUOTED_IDENTIFIER instelt op OFF, kunt u geen id's aanhalingstekens aanhalingstekens en moeten ze alle Transact-SQL regels voor id's volgen. Zie Database-id's voor meer informatie. U kunt letterlijke tekens scheiden door enkele of dubbele aanhalingstekens. Als u een letterlijke tekenreeks met dubbele aanhalingstekens wilt scheiden, kan de tekenreeks enkele aanhalingstekens bevatten, zoals apostrofs.

Opmerking

QUOTED_IDENTIFIER beïnvloedt geen afgebakende identificaties die tussen haakjes staan ([ en ]).

U moet instellen SET QUOTED_IDENTIFIER op ON wanneer u indexen maakt of wijzigt voor berekende kolommen of geïndexeerde weergaven. Als u instelt SET QUOTED_IDENTIFIER op OFF, CREATE, , UPDATEen INSERTDELETE instructies mislukken voor 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.

U moet instellen SET QUOTED_IDENTIFIER op ON wanneer u een gefilterde index maakt.

U moet instellen SET QUOTED_IDENTIFIER op ON wanneer u xml-gegevenstypemethoden aanroept .

Het ODBC-stuurprogramma voor SQL Server systeemeigen client en SQL Server systeemeigen CLIENT OLE DB-provider voor SQL Server automatisch QUOTED_IDENTIFIER instellen op ON wanneer u verbinding maakt. U kunt deze instelling configureren in ODBC-gegevensbronnen, in ODBC-verbindingskenmerken of OLE DB-verbindingseigenschappen. De standaard voor SET QUOTED_IDENTIFIER is OFF voor verbindingen van DB-Library applicaties.

Wanneer u een tabel maakt, worden de metagegevens van de tabel altijd opgeslagen QUOTED_IDENTIFIER alsof ON u de optie OFF instelt voor het maken van de tabel.

Wanneer u een opgeslagen procedure maakt, worden de SET QUOTED_IDENTIFIER en SET ANSI_NULLS instellingen vastgelegd en gebruikt voor volgende aanroepen van die opgeslagen procedure.

Wanneer u in een opgeslagen procedure uitvoert SET QUOTED_IDENTIFIER , wordt de instelling niet gewijzigd.

Wanneer u instelt SET ANSI_DEFAULTS op ON, QUOTED_IDENTIFIER wordt ook ingesteld op ON.

SET QUOTED_IDENTIFIERkomt overeen met de QUOTED_IDENTIFIER setting van ALTER DATABASE.

SET QUOTED_IDENTIFIER wordt van kracht op Transact-SQL parseertijd en is alleen van invloed op parseren, niet op queryoptimalisatie of queryuitvoering.

Voor een topniveau ad hoc batch begint parsen met de huidige instelling van de sessie voor QUOTED_IDENTIFIER. Wanneer de batch wordt geparseerd, wordt het SET QUOTED_IDENTIFIER parseringsgedrag vanaf dat punt gewijzigd en wordt die instelling voor de sessie opgeslagen. Dus nadat de batch is geparseerd en uitgevoerd, wordt de instelling van QUOTED_IDENTIFIER de sessie ingesteld op basis van het laatste exemplaar van SET QUOTED_IDENTIFIER de batch.

Statische Transact-SQL in een opgeslagen procedure wordt geparseerd met behulp van de instelling QUOTED_IDENTIFIER voor de batch die de opgeslagen procedure heeft gemaakt of gewijzigd. SET QUOTED_IDENTIFIER heeft geen effect wanneer deze wordt weergegeven in de hoofdtekst van een opgeslagen procedure als statisch Transact-SQL.

Voor een geneste batch die gebruikmaakt van sp_executesql of exec()begint parseren 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 AS VARCHAR (3) = 'OFF';

IF ((256 & @@OPTIONS) = 256)
BEGIN
    SET @QUOTED_IDENTIFIER = 'ON';
END

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Permissions

Vereist lidmaatschap van de rol openbare vaste database.

Voorbeelden

Eén. Gebruik de instelling voor aanhalingstekens en objectnamen van gereserveerde woorden

In het volgende voorbeeld ziet u dat de SET QUOTED_IDENTIFIER instelling moet zijn ONen dat de trefwoorden in tabelnamen tussen dubbele aanhalingstekens moeten staan om objecten met gereserveerde trefwoordnamen te maken en te gebruiken.

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

In het volgende voorbeeld ziet u hoe enkele en dubbele aanhalingstekens worden gebruikt in tekenreeksexpressies waarbij SET QUOTED_IDENTIFIER deze zijn ingesteld op ON en OFF.

SET QUOTED_IDENTIFIER OFF;
GO

USE AdventureWorks2025;
GO

IF EXISTS (SELECT TABLE_NAME
           FROM INFORMATION_SCHEMA.TABLES
           WHERE TABLE_NAME = 'Test')
    DROP TABLE dbo.Test;
GO

USE AdventureWorks2025;
GO

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