Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Powoduje, że SQL Server przestrzega zasad ISO dotyczących cudzysłowu, wyznaczania identyfikatorów i ciągów literalnych. Identyfikatory oddzielone podwójnymi cudzysłowami mogą być albo Transact-SQL zarezerwowane słowa kluczowe, albo zawierać znaki zazwyczaj niedozwolone przez Transact-SQL reguły składni dla identyfikatorów.
Transact-SQL konwencje składni
Składnia
Syntax for SQL Server, Azure SQL Database, serverless SQL pool in Azure Synapse Analytics oraz Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Składnia dla usług Azure Synapse Analytics i Parallel Data Warehouse.
SET QUOTED_IDENTIFIER ON
Uwagi
Gdy SET QUOTED_IDENTIFIER jest ( ON domyślnie), identyfikatory można wyznaczyć podwójnymi cudzysłowami (""), a literaly muszą być wyznaczane pojedynczym cudzysłowem (''). Wszystkie ciągi oznaczone podwójnym cudzysłowem są interpretowane jako identyfikatory obiektów. Cytowane identyfikatory nie muszą przestrzegać zasad Transact-SQL dla identyfikatorów. Mogą to być słowa kluczowe i zawierać znaki, które nie są dozwolone w Transact-SQL identyfikatorach. Jeśli podwójny cudzysłów (") jest częścią identyfikatora, można go przedstawić za pomocą dwóch podwójnych cudzysłowów ("").
SET QUOTED_IDENTIFIER musi być, ON gdy zarezerwowane słowa kluczowe są używane do nazw obiektów w bazie danych.
Gdy SET QUOTED_IDENTIFIER jest OFF, identyfikatory nie mogą być cytowane i muszą spełniać wszystkie Transact-SQL reguły dotyczące identyfikatorów. Aby uzyskać więcej informacji, zobacz Identyfikatory bazy danych. Literaly można wyznaczyć za pomocą cudzysłowów pojedynczych lub podwójnych. Jeśli literalny ciąg jest wyznaczony podwójnymi cudzysłowami, może zawierać wbudowane pojedyncze cudzysłowy, takie jak apostrofy.
Uwaga / Notatka
QUOTED_IDENTIFIER nie wpływa na identyfikatory wyznaczone w nawiasach ([ i ]).
SET QUOTED_IDENTIFIER musi być ON, gdy tworzysz lub zmieniasz indeksy w kolumnach obliczeniowych lub indeksowanych widokach. Jeśli SET QUOTED_IDENTIFIER jest , OFFto CREATE, UPDATE, INSERT, , i instrukcje zawodzą DELETE w tabelach z indeksami w obliczonych kolumnach lub tabelach z indeksowanymi widokami. Aby uzyskać więcej informacji o wymaganych SET ustawieniach opcji z indeksowanymi widokami i indeksami w kolumnach obliczeniowych, zobacz Rozważania przy użyciu instrukcji SET.
SET QUOTED_IDENTIFIER Musi być ON wtedy, gdy tworzysz indeks filtrowany.
SET QUOTED_IDENTIFIER Musi być wtedy, ON gdy wywołujesz metody typu danych XML .
SQL Server Native Client ODBC driver oraz SQL Server Native Client OLE DB Provider dla SQL Server automatycznie ustawione QUOTED_IDENTIFIER podczas ON łączenia. Można to skonfigurować w źródłach danych ODBC, w atrybutach połączenia ODBC lub właściwościach połączenia OLE DB. Domyślnie dla SET QUOTED_IDENTIFIEROFF połączeń z DB-Library aplikacji.
Gdy tabela jest tworzona, opcja jest zawsze przechowywana w ON metadanych tabeli, QUOTED IDENTIFIER nawet jeśli opcja jest ustawiona na OFF moment tworzenia tabeli.
Gdy procedura przechowywana jest tworzona, ustawienia SET QUOTED_IDENTIFIER i SET ANSI_NULLS są przechwytywane i używane do kolejnych wywołań tej procedury.
Gdy jest wykonywany w procedurze zapisanej, ustawienie nie SET QUOTED_IDENTIFIER ulega zmianie.
Gdy SET ANSI_DEFAULTS jest , ONQUOTED_IDENTIFIER jest również ON.
SET QUOTED_IDENTIFIERodpowiada QUOTED_IDENTIFIER ustawieniu ALTER DATABASE.
SET QUOTED_IDENTIFIER Działanie działa w Transact-SQL momencie parsowania i wpływa jedynie na parsowanie, a nie na optymalizację zapytań czy wykonanie zapytań.
Dla najwyższego poziomu ad hoc partii parsowanie zaczyna się przy użyciu aktualnego ustawienia sesji dla QUOTED_IDENTIFIER. Podczas analizy partii każde zdarzenie zmienia SET QUOTED_IDENTIFIER zachowanie parsowania od tego momentu, a to ustawienie zapisuje na sesję. Po parsowaniu i wykonaniu partii, ustawienie sesji QUOTED_IDENTIFIER zostanie ustawione zgodnie z ostatnim wystąpieniem w SET QUOTED_IDENTIFIER partii.
Statyczne Transact-SQL w procedurze przechowywanej jest analizowane przy użyciu QUOTED_IDENTIFIER ustawienia obowiązującego dla partii, która utworzyła lub zmieniła procedurę przechowywaną.
SET QUOTED_IDENTIFIER nie ma wpływu, gdy pojawia się w ciele procedury przechowywanej jako statyczny Transact-SQL.
Dla zagnieżdżonej partii z użyciem sp_executesql lub exec(), parsowanie zaczyna się przy użyciu QUOTED_IDENTIFIER ustawienia sesji. Jeśli zagnieżdżona partia znajduje się w procedurze zapisanej, parsowanie zaczyna się przy użyciu QUOTED_IDENTIFIER ustawienia procedury zapisanej. W miarę parsowania zagnieżdżonej partii, każde wystąpienie zmienia SET QUOTED_IDENTIFIER zachowanie parsowania od tego momentu, ale ustawienia sesji QUOTED_IDENTIFIER nie są aktualizowane.
Aby zobaczyć aktualne ustawienie dla tego ustawienia, wykonaj następujące zapytanie:
DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Permissions
Wymaga członkostwa w publicznej roli .
Przykłady
A. Użyj ustawienia identyfikatora z cytatem oraz nazw obiektów zarezerwowanych
Poniższy przykład pokazuje, że ustawienie SET QUOTED_IDENTIFIER musi być , ONa słowa kluczowe w nazwach tabel muszą być w podwójnych cudzysłowach, aby tworzyć i używać obiektów z zarezerwowanymi nazwami słów kluczowych.
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. Użyj ustawienia identyfikatora z cytowaniem z pojedynczym i podwójnym cudzysłowem
Poniższy przykład pokazuje, jak pojedynczy i podwójny cudzysłów są używane w wyrażeniach ciągowych z SET QUOTED_IDENTIFIER ustawionymi na i 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
Oto zestaw wyników.
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
Treści powiązane
- UTWÓRZ BAZĘ DANYCH
- CREATE DEFAULT (Transact-SQL)
- UTWÓRZ PROCEDURĘ (Transact-SQL)
- REGUŁA CREATE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- UTWÓRZ TRIGGER (Transact-SQL)
- UTWÓRZ WIDOK (Transact-SQL)
- Typy danych (Transact-SQL)
- WYKONAJ (Transact-SQL)
- WYBIERZ (Transact-SQL)
- INSTRUKCJE SET (Transact-SQL)
- ZESTAW ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Identyfikatory bazy danych