Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL analytics endpoint in Microsoft Fabric
Warehouse w Microsoft Fabric
SQL database in Microsoft Fabric
Ustawienie QUOTED_IDENTIFIER powoduje, że SQL Server postępować zgodnie z regułami ISO dla cudzysłowu delimiting identyfikatorów i ciągów literałów. Jeśli używasz podwójnych cudzysłowów do rozdzielania identyfikatorów, możesz użyć Transact-SQL zarezerwowanych słów kluczowych lub dołączyć znaki, które reguły składni Transact-SQL zwykle nie zezwalają na identyfikatory.
Transact-SQL konwencje składni
Składnia
Składnia SQL Server, Azure SQL Database bezserwerowej puli SQL w Azure Synapse Analytics i Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Składnia Azure Synapse Analytics i Data Warehouse równoległych.
SET QUOTED_IDENTIFIER ON
Uwagi
Po ustawieniu SET QUOTED_IDENTIFIERON wartości (domyślnej) można użyć podwójnych znaków cudzysłowu ("") do rozdzielenia identyfikatorów i należy użyć pojedynczych cudzysłowów ('') do rozdzielenia literałów. Wszystkie ciągi ujęte w znaki podwójnego cudzysłowu są interpretowane jako identyfikatory obiektów. Identyfikatory cytowane nie muszą być zgodne z regułami Transact-SQL dla identyfikatorów. Mogą to być słowa kluczowe i mogą zawierać znaki, które nie są dozwolone w identyfikatorach Transact-SQL. Jeśli podwójny cudzysłów (") jest częścią identyfikatora, można go przedstawić za pomocą dwóch podwójnych cudzysłowów (""). Należy ustawić wartość SET QUOTED_IDENTIFIER , ON gdy używasz zarezerwowanych słów kluczowych dla nazw obiektów w bazie danych.
Po ustawieniu SET QUOTED_IDENTIFIER na wartość OFF nie można podać identyfikatorów i muszą one przestrzegać wszystkich reguł Transact-SQL dla identyfikatorów. Aby uzyskać więcej informacji, zobacz Identyfikatory bazy danych. Literały można rozdzielić za pomocą pojedynczych lub podwójnych cudzysłowów. Jeśli rozdzielisz ciąg literału za pomocą podwójnych cudzysłowów, ciąg może zawierać osadzone pojedyncze cudzysłów, takie jak apostrofy.
Uwaga / Notatka
QUOTED_IDENTIFIER nie wpływa na identyfikatory wyznaczone w nawiasach ([ i ]).
Należy ustawić wartość SET QUOTED_IDENTIFIER na ON wartość podczas tworzenia lub zmieniania indeksów kolumn obliczeniowych lub indeksowanych widoków. Jeśli ustawiono SET QUOTED_IDENTIFIEROFFwartość , , CREATE, INSERTUPDATE, i DELETE instrukcje nie będą działać w tabelach z indeksami w kolumnach obliczanych lub tabel 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.
Należy ustawić wartość SET QUOTED_IDENTIFIER na ON podczas tworzenia filtrowanego indeksu.
Należy ustawić wartość SET QUOTED_IDENTIFIER na ON podczas wywoływania metod typu danych XML .
Sterownik ODBC klienta natywnego SQL Server i dostawca OLE DB klienta natywnego SQL Server natywnego dla SQL Server automatycznie ustawić QUOTED_IDENTIFIER na ON podczas nawiązywania połączenia. To ustawienie można 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.
Podczas tworzenia tabeli metadane tabeli zawsze przechowują QUOTED_IDENTIFIER tę opcję, ON nawet jeśli ustawisz opcję na OFF wartość podczas tworzenia tabeli.
Podczas tworzenia procedury SET QUOTED_IDENTIFIER składowanej ustawienia i SET ANSI_NULLS są przechwytywane i używane do kolejnych wywołań tej procedury składowanej.
Podczas wykonywania SET QUOTED_IDENTIFIER wewnątrz procedury składowanej ustawienie nie zmienia się.
Po ustawieniu SET ANSI_DEFAULTSONwartości na wartość parametr QUOTED_IDENTIFIER jest również ustawiona wartość ON.
SET QUOTED_IDENTIFIERodpowiada QUOTED_IDENTIFIER ustawieniu ALTER DATABASE.
SET QUOTED_IDENTIFIER działa w czasie Transact-SQL analizowania i ma wpływ tylko na analizowanie, a nie optymalizację zapytań ani wykonywanie zapytań.
Dla najwyższego poziomu ad hoc partii parsowanie zaczyna się przy użyciu aktualnego ustawienia sesji dla QUOTED_IDENTIFIER. W miarę analizowania partii każde wystąpienie SET QUOTED_IDENTIFIER zmiany zachowania analizy od tego momentu i zapisuje to ustawienie dla sesji. Dlatego po przeanalizowaniu i wykonaniu partii ustawienie sesji jest ustawione zgodnie z ostatnim wystąpieniem SET QUOTED_IDENTIFIER w partiiQUOTED_IDENTIFIER.
Statyczne Transact-SQL w procedurze składowanej są analizowane przy użyciu ustawienia QUOTED_IDENTIFIER obowiązującego dla partii, która utworzyła lub zmieniła procedurę składowaną.
SET QUOTED_IDENTIFIER nie ma wpływu, gdy pojawia się w treści procedury składowanej jako statyczna Transact-SQL.
W przypadku zagnieżdżonej partii, która używa sp_executesql lub exec(), analizowanie rozpoczyna 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 AS 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 stałej roli bazy danych.
Przykłady
A. Użyj ustawienia identyfikatora z cytatem oraz nazw obiektów zarezerwowanych
W poniższym przykładzie pokazano, że SET QUOTED_IDENTIFIER ustawienie musi mieć ONwartość , a słowa kluczowe w nazwach tabel muszą znajdować się w podwójnym cudzysłowie, aby utworzyć obiekty i używać ich z zastrzeżonymi 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
W poniższym przykładzie pokazano, jak pojedyncze i podwójne cudzysłów są używane w wyrażeniach ciągów z ustawioną wartością SET QUOTED_IDENTIFIERON i 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
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
- UTWÓRZ DOMYŚLNE (Transact-SQL)
- UTWÓRZ PROCEDURĘ (Transact-SQL)
- UTWÓRZ REGUŁĘ (Transact-SQL)
- TWORZENIE TABELI (Transact-SQL)
- UTWÓRZ WYZWALACZ (Transact-SQL)
- UTWÓRZ WIDOK (Transact-SQL)
- typy Data (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- instrukcje SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Identyfikatory bazy danych