SET QUOTED_IDENTIFIER (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL analytics endpoint in Microsoft FabricWarehouse v Microsoft FabricSQL v databázi Microsoft Fabric

Nastavení QUOTED_IDENTIFIER způsobí, že SQL Server dodržovat pravidla ISO pro uvozovky delimiting identifiers a literálové řetězce. Pokud k oddělovači identifikátorů používáte dvojité uvozovky, můžete použít buď Transact-SQL rezervovaná klíčová slova, nebo zahrnout znaky, které pravidla syntaxe Transact-SQL obvykle nepovolují v identifikátorech.

Transact-SQL konvence syntaxe

Syntaxe

Syntaxe pro SQL Server, Azure SQL Database, bezserverový fond SQL ve Azure Synapse Analytics a Microsoft Fabric.

SET QUOTED_IDENTIFIER { ON | OFF }

Syntaxe pro Azure Synapse Analytics a paralelní Data Warehouse

SET QUOTED_IDENTIFIER ON

Poznámky

Když nastavíte SET QUOTED_IDENTIFIER hodnotu ON (výchozí), můžete k oddělovači identifikátorů použít dvojité uvozovky ("") a k oddělovači literálů je nutné použít jednoduché uvozovky (''). Všechny řetězce uzavřené v uvozovkách se interpretují jako identifikátory objektů. Identifikátory quoted nemusí dodržovat pravidla Transact-SQL identifikátorů. Můžou to být klíčová slova a můžou obsahovat znaky, které nejsou v identifikátorech Transact-SQL povolené. Pokud je uvozovka (") součástí identifikátoru, můžete ji znázorňovat dvěma dvojitými uvozovkami (""). Je nutné nastavit SET QUOTED_IDENTIFIER , když ON použijete vyhrazená klíčová slova pro názvy objektů v databázi.

Když nastavíte SET QUOTED_IDENTIFIER na OFF, nemůžete uvozovky a musí dodržovat všechna pravidla Transact-SQL identifikátorů. Další informace naleznete v tématu Identifikátory databáze. Literály můžete oddělovat jednoduchými nebo dvojitými uvozovkami. Pokud řetězec literálu oddělujete dvojitými uvozovkami, může řetězec obsahovat vložené jednoduché uvozovky, například apostrofy.

Poznámka:

QUOTED_IDENTIFIER neovlivňuje ohraničené identifikátory uzavřené v závorkách ([ a ]).

Při vytváření nebo změně indexů ve počítaných sloupcích nebo indexovaných zobrazeních je nutné nastavit SET QUOTED_IDENTIFIER hodnotu ON . Pokud nastavíte hodnotu SET QUOTED_IDENTIFIEROFF , , CREATE, UPDATEINSERT, a DELETE příkazy selžou u tabulek s indexy na počítané sloupce nebo tabulky s indexovanými zobrazeními. Pro více informací o požadovaných SET nastaveních možností s indexovanými zobrazeními a indexy ve vypočítaných sloupcích viz Úvahy při používání příkazů SET.

Při vytváření filtrovaného indexu je nutné nastavit SET QUOTED_IDENTIFIER hodnotu ON .

Při vyvolání metod datového typu SET QUOTED_IDENTIFIER je nutné nastavit ON hodnotu.

Ovladač ODBC nativního klienta SQL Server a SQL Server zprostředkovatele OLE DB nativního klienta pro SQL Server při připojování automaticky nastavte QUOTED_IDENTIFIER na ON. Toto nastavení můžete nakonfigurovat ve zdrojích dat ODBC, v atributech připojení ODBC nebo ve vlastnostech připojení OLE DB. Výchozí SET QUOTED_IDENTIFIER pro je pro OFF spojení z DB-Library aplikací.

Když vytváříte tabulku, metadata tabulky vždy ukládají QUOTED_IDENTIFIER možnost, jako ON kdybyste při vytváření tabulky nastavili možnost OFF .

Při vytváření uložené procedury SET QUOTED_IDENTIFIER se zachytí a SET ANSI_NULLS použijí se pro následné vyvolání této uložené procedury.

Když spustíte SET QUOTED_IDENTIFIER uloženou proceduru, nastavení se nezmění.

Když nastavíte SET ANSI_DEFAULTSONhodnotu , QUOTED_IDENTIFIER je také nastavena na ON.

SET QUOTED_IDENTIFIERodpovídá QUOTED_IDENTIFIER nastavení ALTER DATABASE.

SET QUOTED_IDENTIFIER se projeví při analýze Transact-SQL a má vliv pouze na analýzu, nikoli na optimalizaci dotazů nebo provádění dotazů.

Pro ad hoc dávku nejvyšší úrovně začíná parsování pomocí aktuálního nastavení relace pro QUOTED_IDENTIFIER. Když je dávka analyzována, všechny výskyty SET QUOTED_IDENTIFIER změn chování analýzy od tohoto okamžiku a uloží toto nastavení pro relaci. Takže po parsování a spuštění dávky se nastavení relace QUOTED_IDENTIFIER nastaví podle posledního výskytu SET QUOTED_IDENTIFIER v dávce.

Statické Transact-SQL v uložené proceduře se parsuje pomocí nastavení QUOTED_IDENTIFIER pro dávku, která vytvořila nebo změnila uloženou proceduru. SET QUOTED_IDENTIFIER nemá žádný vliv, pokud se zobrazí v těle uložené procedury jako statické Transact-SQL.

Pro vnořenou dávku, která používá sp_executesql nebo exec()začne analýza používat QUOTED_IDENTIFIER nastavení relace. Pokud je vnořená dávka uvnitř uložené procedury, začíná parsování pomocí QUOTED_IDENTIFIER nastavení uložené procedury. Při parsování vnořené série se SET QUOTED_IDENTIFIER od té chvíle mění jakékoli její výskyt, ale nastavení relace QUOTED_IDENTIFIER se neaktualizuje.

Pro zobrazení aktuálního nastavení tohoto nastavení spusťte následující dotaz:

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

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

SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;

Povolení

Vyžaduje členství ve veřejné pevné databázové roli.

Examples

A. Použijte nastavení identifikátorů s úvodovkami a názvy objektů vyhrazených slov

Následující příklad ukazuje, že SET QUOTED_IDENTIFIER nastavení musí být ONa klíčová slova v názvech tabulek musí být v uvozovkách, aby bylo možné vytvářet a používat objekty s vyhrazenými názvy klíčových slov.

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. Použijte nastavení identifikátoru s úvodkami s jednou a dvojitou uvozovkou

Následující příklad ukazuje použití jednoduchých a dvojitých uvozovek ve výrazech řetězců s nastavenou SET QUOTED_IDENTIFIER na ON a 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

Tady je soubor výsledků.

 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