Megosztás a következőn keresztül:


SET QUOTED_IDENTIFIER (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Az SQL Server követi az ISO szabályokat az idézőjel azonosítók és literális stringek határolására vonatkozóan. A dupla idézőjelekkel jelölt azonosítók lehetnek Transact-SQL fenntartott kulcsszavak, vagy tartalmazhatnak karaktereket, amelyeket általában nem engedélyeznek a Transact-SQL szintaxisszabályai az azonosítókhoz.

Transact-SQL szintaxis konvenciók

Szemantika

Syntax for SQL Server, Azure SQL Database, serverless SQL pool in Azure Synapse Analytics és Microsoft Fabric.

SET QUOTED_IDENTIFIER { ON | OFF }

Az Azure Synapse Analytics és a párhuzamos adattárház szintaxisa.

SET QUOTED_IDENTIFIER ON

Megjegyzések

Amikor SET QUOTED_IDENTIFIER az (alapértelmezett ON ), az azonosítók dupla idézőjelekkel (""), a literálisokat pedig egyetlen idézőjelgel ('') kell leválasztani. Minden idézőjelgel jelölt stringet objektumazonosítóként értelmeznek. Az idézett azonosítóknak nem kell követniük a Transact-SQL szabályokat az azonosítókhoz. Lehetnek kulcsszavak, és tartalmazhatnak olyan karaktereket, amelyek nem engedélyezettek Transact-SQL azonosítókban. Ha egy dupla idézőjel (") az azonosító része, akkor két idézőjel (""). SET QUOTED_IDENTIFIER akkor kell lennie ON , amikor az adatbázisban objektumnevekhez fenntartott kulcsszavakat használnak.

Ha SET QUOTED_IDENTIFIER az OFF, az azonosítók nem idézhetők, és minden Transact-SQL azonosító szabályt követniük kell. További információ: Adatbázis-azonosítók. A szó szerinti szavakat idézőjelekkel lehet megkülönböztetni. Ha egy literális láncot idézőjelekkel szegélyeznek, akkor a lánc tartalmazhat beépített idézőjeleket, például aposztrófokat.

Megjegyzés:

QUOTED_IDENTIFIER nem érinti a zárójelben[ ( és ]) bezárt departált azonosítókat.

SET QUOTED_IDENTIFIER-nak ON-nek kell lennie, amikor indexeket hoz létre vagy módosít számított oszlopokon vagy indexelt nézeteken. Ha SET QUOTED_IDENTIFIER , OFFakkor CREATE, UPDATEINSERTés DELETE utasítások meghibásodnak olyan táblákon, ahol az indexek számított oszlopokon vannak, vagy tábláknál, amelyek indexelt nézetekkel rendelkeznek. További információért az indexelt nézetekkel és számolt oszlopokon végzett indexekkel kapcsolatos szükséges SET opcióbeállításokról lásd: A SET utasítások használatakor megfontolható tényezők.

SET QUOTED_IDENTIFIER Biztosan akkor van ON , amikor szűrt indexet hozol létre.

SET QUOTED_IDENTIFIER Biztosan akkor kell meghívni ONXML adattípus metóduszokat.

Az SQL Server Native Client ODBC illesztőprogram és SQL Server Native Client OLE DB Provider SQL Server esetén automatikusan beállítható QUOTED_IDENTIFIERON a csatlakozáskor. Ez konfigurálható ODBC adatforrásokban, ODBC kapcsolat attribútumokban vagy OLE DB kapcsolati tulajdonságokban. Az alapértelmezett beállítás SET QUOTED_IDENTIFIEROFF DB-Library alkalmazásokból érkező kapcsolatokra vonatkozik.

Amikor egy tábla létrejött, az QUOTED IDENTIFIER opció mindig a ON tábla metaadataiban tárolva marad, még akkor is, ha az opció a tábla létrehozásának időpontjára van beállítva OFF .

Amikor egy tárolt eljárást létrehoznak, a SET QUOTED_IDENTIFIER és SET ANSI_NULLS beállításait rögzítik, és a tárolt eljárás további meghívásaihoz használják.

Ha egy tárolt eljáráson belül futtatják, a beállítás SET QUOTED_IDENTIFIER nem változik.

Amikor SET ANSI_DEFAULTS az ON, QUOTED_IDENTIFIER szintén ON.

SET QUOTED_IDENTIFIER megfelel az QUOTED_IDENTIFIERALTER DATABASE beállításának.

SET QUOTED_IDENTIFIER Transact-SQL parse-időben lép életbe, és csak a parsinget érinti, nem a lekérdezések optimalizálását vagy a lekérdezés végrehajtását.

A felső szintű ad hoc szakasz esetén a parsing a session aktuális beállításával kezd el .QUOTED_IDENTIFIER Ahogy a batch elemzése történik, bármilyen előforduló SET QUOTED_IDENTIFIER változás változik az elemzési viselkedés ettől a ponttól, és ezt a beállítást elmentse a játékmenetre. Tehát miután a batch elemzése és végrehajtása után a session QUOTED_IDENTIFIER beállításai a sorozat utolsó előfordulója SET QUOTED_IDENTIFIER alapján lesz beállítva.

A statikus Transact-SQL egy tárolt eljárásban a tárolt eljárás beállításával QUOTED_IDENTIFIER együtt értelmezik, amely a tárolt eljárást létrehozta vagy módosította a tétel esetében. SET QUOTED_IDENTIFIER nem hatásos, ha egy tárolt eljárás testében statikus Transact-SQL-ként jelenik meg.

Egy beágyazott adag esetén sp_executesql vagy exec(), az elemzés a szekció beállításával kezdődik QUOTED_IDENTIFIER . Ha a beágyazott kötet egy tárolt eljárásban van, a parsing a tárolt eljárás beállításaival kezdődik QUOTED_IDENTIFIER . Ahogy a beágyazott köteg elemzése történik, bármilyen előfordulás SET QUOTED_IDENTIFIER megváltoztatja a parzálási viselkedést onnantól kezdve, de a session QUOTED_IDENTIFIER beállításai nem frissülnek.

A jelenlegi beállítás megtekintéséhez futtasd le a következő lekérdezést:

DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';

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

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Permissions

A nyilvános szerepkör tagságát igényli.

Példák

A. Használd a idézőjeles azonosító beállítást és a fenntartott szó objektumneveket

A következő példa azt mutatja, hogy a SET QUOTED_IDENTIFIER beállításnak , ONés a táblanevek kulcsszavainak dupla idézőjelben kell lenniük ahhoz, hogy olyan objektumokat hozzanak létre és használják, amelyeknek fenntartott kulcsszónevei vannak.

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. Használd az idézőjeles azonosító beállítást idézőjelekkel és dupla idézőjelekkel

A következő példa bemutatja, hogyan használják az egyetlen és dupla idézőjeleket a stringkifejezésekben, ahol SET QUOTED_IDENTIFIER és -re vannak beállítva ONOFF.

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

Itt van az eredmények összessége.

 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