SET QUOTED_IDENTIFIER (Transact-SQL)
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric
Hace que SQL Server siga las reglas de ISO en cuanto a comillas delimitadoras de identificadores y cadenas literales se refiere. Los identificadores delimitados con comillas dobles pueden ser palabras clave reservadas de Transact-SQL o pueden contener caracteres normalmente no admitidos por las reglas sintácticas para identificadores de Transact-SQL.
Convenciones de sintaxis de Transact-SQL
Sintaxis
Sintaxis para SQL Server, Azure SQL Database, grupo de SQL sin servidor en Azure Synapse Analytics y Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Sintaxis para Azure Synapse Analytics y Almacenamiento de datos paralelos.
SET QUOTED_IDENTIFIER ON
Comentarios
Cuando SET QUOTED_IDENTIFIER
es ON
(valor predeterminado), los identificadores se pueden delimitar entre comillas dobles (""
) y los literales deben delimitarse entre comillas simples (''
). Todas las cadenas delimitadas por comillas dobles se interpretan como identificadores de objetos. Los identificadores entre comillas no tienen que adaptarse a las reglas de Transact-SQL para identificadores. Pueden ser palabras clave e incluir caracteres que no se permiten en los identificadores de Transact-SQL. Si una comilla doble ("
) forma parte del identificador, puede representarse entre dos comillas dobles (""
). SET QUOTED_IDENTIFIER
debe ser ON
cuando se usan palabras clave reservadas para los nombres de objeto de la base de datos.
Cuando SET QUOTED_IDENTIFIER
es OFF
, los identificadores no se pueden citar y deben seguir todas las reglas de Transact-SQL para los identificadores. Para obtener más información, consulte Identificadores de base de datos. Los literales se pueden delimitar con comillas simples o dobles. Si una cadena literal se delimita con comillas dobles, podrá contener comillas simples incrustadas, como, por ejemplo, apóstrofos.
Nota:
QUOTED_IDENTIFIER
no afecta a los identificadores delimitados entre corchetes ([
y ]
).
SET QUOTED_IDENTIFIER
debe ser ON
al crear o cambiar índices en columnas calculadas o vista indexadas. Si SET QUOTED_IDENTIFIER
es OFF
, las CREATE
instrucciones , UPDATE
, INSERT
y DELETE
producen un error en las tablas con índices en columnas calculadas o tablas con vistas indizadas. Para obtener más información sobre la configuración de opciones necesaria SET
con vistas indizadas e índices en columnas calculadas, consulte Consideraciones al usar las instrucciones SET.
SET QUOTED_IDENTIFIER
debe ser ON
cuando se crea un índice filtrado.
SET QUOTED_IDENTIFIER
debe ser ON
cuando se invocan métodos de tipo de datos xml .
El controlador ODBC de SQL Server Native Client y el proveedor OLE DB de SQL Server Native Client para SQL Server se establecen QUOTED_IDENTIFIER
ON
automáticamente en al conectarse. Esta opción se puede configurar en los orígenes de datos ODBC, en los atributos de conexión ODBC o en las propiedades de conexión OLE DB. El valor predeterminado de SET QUOTED_IDENTIFIER
es OFF
para las conexiones de las aplicaciones de la biblioteca de bases de datos.
Cuando se crea una tabla, la QUOTED IDENTIFIER
opción siempre se almacena como ON
en los metadatos de la tabla, incluso si la opción se establece OFF
en cuando se crea la tabla.
Cuando se crea un procedimiento almacenado, la SET QUOTED_IDENTIFIER
configuración y SET ANSI_NULLS
se capturan y se usan para las invocaciones posteriores de ese procedimiento almacenado.
Cuando se ejecuta dentro de un procedimiento almacenado, no se cambia la configuración de SET QUOTED_IDENTIFIER
.
Cuando SET ANSI_DEFAULTS
es ON
, QUOTED_IDENTIFIER
también ON
es .
SET QUOTED_IDENTIFIER
corresponde a la QUOTED_IDENTIFIER
configuración de ALTER DATABASE.
SET QUOTED_IDENTIFIER
tiene efecto en tiempo de análisis de Transact-SQL y solo afecta al análisis, no a la optimización ni a la ejecución de la consulta.
Para un lote ad hoc de nivel superior, el análisis comienza a usar la configuración actual de la sesión para QUOTED_IDENTIFIER
. A medida que el lote se analiza cualquier aparición de SET QUOTED_IDENTIFIER
cambios en el comportamiento de análisis desde ese punto, y guarde esa configuración para la sesión. Por lo tanto, después de analizar y ejecutar el lote, la configuración de QUOTED_IDENTIFIER
la sesión se establecerá según la última aparición del SET QUOTED_IDENTIFIER
lote.
Transact-SQL estático en un procedimiento almacenado se analiza mediante la QUOTED_IDENTIFIER
configuración en vigor para el lote que creó o modificó el procedimiento almacenado. SET QUOTED_IDENTIFIER
no tiene ningún efecto cuando aparece en el cuerpo de un procedimiento almacenado como el valor de Transact-SQL estático.
Para un lote anidado mediante sp_executesql o exec()
, el análisis comienza a usar la QUOTED_IDENTIFIER
configuración de la sesión. Si el lote anidado está dentro de un procedimiento almacenado, el análisis comienza a usar la QUOTED_IDENTIFIER
configuración del procedimiento almacenado. A medida que se analiza el lote anidado, cualquier aparición de SET QUOTED_IDENTIFIER
cambia el comportamiento de análisis desde ese punto, pero la configuración de QUOTED_IDENTIFIER
la sesión no se actualiza.
Para ver la configuración actual de este valor, ejecute la siguiente consulta:
DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Permisos
Debe pertenecer al rol public .
Ejemplos
A Usar la configuración del identificador entrecomillado y los nombres de objetos de palabra reservados
En este ejemplo se muestra que, para crear y utilizar objetos cuyos nombres contienen palabras clave reservadas, SET QUOTED_IDENTIFIER
debe ser ON
y las palabras clave reservadas de los nombres de tabla se deben indicar entre comillas dobles.
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. Usar la configuración del identificador entrecomillado con comillas simples y dobles
En este ejemplo se muestra el uso de las comillas simples y dobles en las expresiones de cadena con SET QUOTED_IDENTIFIER
establecido en ON
y OFF
.
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
Este es el conjunto de resultados.
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
Contenido relacionado
- CREATE 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)
- Tipos de datos (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- Instrucciones SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Identificadores de base de datos