Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Applies to:SQL Server
database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL in Microsoft Fabric
L'impostazione QUOTED_IDENTIFIER fa sì che SQL Server segua le regole ISO per le virgolette edelimiting degli identificatori e delle stringhe letterali. Se si usano virgolette doppie per delimitare gli identificatori, è possibile usare Transact-SQL parole chiave riservate o includere caratteri che le regole di sintassi Transact-SQL in genere non consentono negli identificatori.
convenzioni di sintassi Transact-SQL
Sintassi
Sintassi per SQL Server, database SQL di Azure, pool SQL serverless in Azure Synapse Analytics e Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Sintassi per Azure Synapse Analytics e Data Warehouse paralleli.
SET QUOTED_IDENTIFIER ON
Osservazioni:
Quando si imposta su ONSET QUOTED_IDENTIFIER (impostazione predefinita), è possibile usare le virgolette doppie ("") per delimitare gli identificatori ed è necessario usare virgolette singole ('') per delimitare i valori letterali. Tutte le stringhe racchiuse tra virgolette doppie vengono interpretate come identificatori di oggetto. Gli identificatori delimitati non devono seguire le regole di Transact-SQL per gli identificatori. Possono essere parole chiave e possono includere caratteri non consentiti negli identificatori Transact-SQL. Se una virgoletta doppia (") fa parte dell'identificatore, è possibile rappresentarla tra due virgolette doppie (""). È necessario impostare su SET QUOTED_IDENTIFIERON quando si usano parole chiave riservate per i nomi degli oggetti nel database.
Quando si imposta SET QUOTED_IDENTIFIER su OFF, non è possibile citare gli identificatori e devono seguire tutte le regole di Transact-SQL per gli identificatori. Per altre informazioni, vedere Identificatori di database. È possibile delimitare i valori letterali tra virgolette singole o doppie. Se si delimita una stringa letterale tra virgolette doppie, la stringa può contenere virgolette singole incorporate, ad esempio apostrofi.
Nota
QUOTED_IDENTIFIER non influisce sugli identificatori delimitati racchiusi tra parentesi quadre ([ e ]).
È necessario impostare su SET QUOTED_IDENTIFIERON quando si creano o modificano indici in colonne calcolate o viste indicizzate. Se le SET QUOTED_IDENTIFIEROFFistruzioni , CREATEUPDATE, INSERT, e DELETE hanno esito negativo nelle tabelle con indici su colonne calcolate o tabelle con viste indicizzate. Per altre informazioni sulle impostazioni delle opzioni necessarie SET con viste indicizzate e indici nelle colonne calcolate, vedere Considerazioni quando si usano le istruzioni SET.
È necessario impostare su SET QUOTED_IDENTIFIERON quando si crea un indice filtrato.
È necessario impostare su SET QUOTED_IDENTIFIERON quando si richiamano metodi con tipo di dati xml .
Il driver ODBC SQL Server Native Client e SQL Server provider OLE DB di Native Client per SQL Server impostare automaticamente QUOTED_IDENTIFIER su ON durante la connessione. È possibile configurare questa impostazione nelle origini dati ODBC, negli attributi di connessione ODBC o nelle proprietà di connessione OLE DB. L'impostazione predefinita per SET QUOTED_IDENTIFIER è OFF per le connessioni dalle applicazioni della libreria di database.
Quando si crea una tabella, i metadati della tabella archiviano sempre l'opzione QUOTED_IDENTIFIER come ON anche se si imposta l'opzione su OFF durante la creazione della tabella.
Quando si crea una stored procedure, le SET QUOTED_IDENTIFIER impostazioni e SET ANSI_NULLS vengono acquisite e usate per le chiamate successive di tale stored procedure.
Quando si esegue SET QUOTED_IDENTIFIER all'interno di una stored procedure, l'impostazione non cambia.
Quando si imposta su SET ANSI_DEFAULTSON, QUOTED_IDENTIFIER viene impostato anche su ON.
SET QUOTED_IDENTIFIER corrisponde all'impostazione QUOTED_IDENTIFIER di ALTER DATABASE.
SET QUOTED_IDENTIFIER ha effetto in fase di analisi Transact-SQL e influisce solo sull'analisi, non sull'ottimizzazione delle query o sull'esecuzione di query.
Per un batch ad hoc di primo livello, l'analisi inizia usando l'impostazione corrente della sessione per QUOTED_IDENTIFIER. Quando il batch viene analizzato, qualsiasi occorrenza di modifica il comportamento di SET QUOTED_IDENTIFIER analisi da quel punto in poi e salva tale impostazione per la sessione. Quindi, dopo l'analisi e l'esecuzione del batch, l'impostazione della QUOTED_IDENTIFIER sessione viene impostata in base all'ultima occorrenza di SET QUOTED_IDENTIFIER nel batch.
Le Transact-SQL statiche in una stored procedure vengono analizzate usando l'impostazione QUOTED_IDENTIFIER in vigore per il batch che ha creato o modificato la stored procedure.
SET QUOTED_IDENTIFIER non ha alcun effetto quando viene visualizzato nel corpo di una stored procedure come Transact-SQL statico.
Per un batch annidato che usa sp_executesql o exec(), l'analisi inizia usando l'impostazione QUOTED_IDENTIFIER della sessione. Se il batch annidato si trova all'interno di una stored procedure, l'analisi inizia a usare l'impostazione QUOTED_IDENTIFIER della stored procedure. Man mano che il batch annidato viene analizzato, qualsiasi occorrenza di modifica il comportamento di SET QUOTED_IDENTIFIER analisi da quel punto in poi, ma l'impostazione della QUOTED_IDENTIFIER sessione non viene aggiornata.
Per visualizzare l'impostazione corrente per questa impostazione, eseguire la query riportata di seguito:
DECLARE @QUOTED_IDENTIFIER AS VARCHAR (3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Autorizzazioni
Richiede l'appartenenza al ruolo predefinito del database pubblico .
Esempi
R. Usare l'impostazione dell'identificatore tra virgolette e i nomi degli oggetti parola riservati
L'esempio seguente mostra che l'impostazione SET QUOTED_IDENTIFIER deve essere ONe le parole chiave nei nomi di tabella devono essere tra virgolette doppie per creare e usare oggetti con nomi di parole chiave riservati.
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. Usare l'impostazione dell'identificatore tra virgolette singole e doppie
Nell'esempio seguente viene illustrato come vengono usate le virgolette singole e doppie nelle espressioni stringa con SET QUOTED_IDENTIFIER impostato su ON e 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
Il set di risultati è il seguente.
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
Contenuto correlato
- CREARE DATABASE
- CREATE DEFAULT (Transact-SQL)
- CREATE PROCEDURE (Transact-SQL)
- CREATE RULE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE TRIGGER (Transact-SQL)
- CREATE VIEW (Transact-SQL)
- Tipi Data (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- istruzioni SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Identificatori di database