Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Приводит к тому, что SQL Server следует правилам ISO относительно идентификаторов с разделителями кавычек и строк литерала. Идентификаторы, заключенные в двойные кавычки, могут быть либо зарезервированными ключевыми словами Transact-SQL, либо могут содержать символы, обычно запрещенные правилами синтаксиса Transact-SQL для идентификаторов.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис для SQL Server, База данных SQL Azure, бессерверного пула SQL в Azure Synapse Analytics и Microsoft Fabric.
SET QUOTED_IDENTIFIER { ON | OFF }
Синтаксис для Azure Synapse Analytics и параллельного хранилища данных.
SET QUOTED_IDENTIFIER ON
Замечания
Если SET QUOTED_IDENTIFIER задано ON (по умолчанию), идентификаторы могут быть разделены двойными кавычками (""), а литералы должны быть разделены одними кавычками (''). Все строки, находящиеся в двойных кавычках, интерпретируются как идентификаторы объектов. Идентификаторы с разделителями не должны соответствовать правилам для идентификаторов Transact-SQL. Они могут быть ключевыми словами и включать символы, не разрешенные в идентификаторах Transact-SQL. Если двойная кавычка (") является частью идентификатора, она может быть представлена двумя двойными кавычками ("").
SET QUOTED_IDENTIFIER должно быть ON , если зарезервированные ключевые слова используются для имен объектов в базе данных.
В SET QUOTED_IDENTIFIER этом случае OFFидентификаторы не могут быть кавычек и должны соответствовать всем правилам Transact-SQL для идентификаторов. Дополнительные сведения см. в разделе "Идентификаторы базы данных". Литералы могут разделяться как одинарными, так и двойными кавычками. Если строки-литералы разделяются двойными кавычками, то в строке могут содержаться внедренные одинарные кавычки, такие как апострофы.
Примечание.
QUOTED_IDENTIFIER не влияет на идентификаторы с разделителями, заключенные в квадратные скобки ([ и ]).
SET QUOTED_IDENTIFIER
ON при создании или изменении индексов в вычисляемых столбцах или индексированных представлениях. Если SET QUOTED_IDENTIFIER значение OFFравно, то CREATEUPDATEINSERTDELETE операторы и инструкции завершаются сбоем в таблицах с индексами в вычисляемых столбцах или таблицах с индексируемыми представлениями. Дополнительные сведения о необходимых SET параметрах с индексируемыми представлениями и индексами в вычисляемых столбцах см. в разделе "Рекомендации" при использовании инструкций SET.
SET QUOTED_IDENTIFIER должен быть ON при создании отфильтрованного индекса.
SET QUOTED_IDENTIFIER должен быть ON при вызове методов типа данных XML .
Драйвер ODBC собственного клиента SQL Server и поставщик OLE DB собственного клиента SQL Server для SQL Server автоматически устанавливаются QUOTED_IDENTIFIERON при подключении. Это может быть настроено в источниках данных ODBC, в атрибутах соединения ODBC или свойствах соединения OLE DB. Значение по умолчанию SET QUOTED_IDENTIFIER предназначено OFF для подключений из приложений DB-Library.
При создании таблицы параметр всегда хранится как QUOTED IDENTIFIER в метаданных таблицы, ON даже если параметр задан OFF при создании таблицы.
При создании SET QUOTED_IDENTIFIER хранимой процедуры фиксируются и SET ANSI_NULLS используются параметры для последующих вызовов этой хранимой процедуры.
При выполнении внутри хранимой процедуры параметр SET QUOTED_IDENTIFIER не изменяется.
Когда SET ANSI_DEFAULTS есть ON, QUOTED_IDENTIFIER также ON.
SET QUOTED_IDENTIFIER соответствует параметру QUOTED_IDENTIFIERALTER DATABASE.
SET QUOTED_IDENTIFIER применяется во время синтаксического анализа Transact-SQL и влияет только на анализ, а не на выполнение или оптимизацию запроса.
Для нерегламентированного пакета верхнего уровня синтаксический анализ начинается с использованием текущего параметра сеанса.QUOTED_IDENTIFIER Так как пакет анализирует любое вхождение SET QUOTED_IDENTIFIER изменений в поведении синтаксического анализа с этого момента и сохраните этот параметр для сеанса. Поэтому после синтаксического анализа и выполнения пакета параметр сеанса QUOTED_IDENTIFIER будет задан в соответствии с последним вхождением SET QUOTED_IDENTIFIER в пакете.
Статический transact-SQL в хранимой процедуре анализируется с помощью QUOTED_IDENTIFIER параметра, который действует для пакета, создавшего или изменившего хранимую процедуру.
SET QUOTED_IDENTIFIER не работает, когда появляется в тексте хранимой процедуры в виде статического Transact-SQL.
Для вложенного пакета с помощью sp_executesql или exec()синтаксического анализа начинается использование QUOTED_IDENTIFIER параметра сеанса. Если вложенный пакет находится внутри хранимой процедуры, синтаксический анализ начинается с настройки QUOTED_IDENTIFIER хранимой процедуры. При синтаксическом анализе вложенного пакета любые изменения SET QUOTED_IDENTIFIER поведения синтаксического анализа с этого момента, но параметр сеанса QUOTED_IDENTIFIER не обновляется.
Чтобы просмотреть текущее значение для этого параметра, выполните следующий запрос:
DECLARE @QUOTED_IDENTIFIER VARCHAR(3) = 'OFF';
IF ((256 & @@OPTIONS) = 256)
BEGIN
SET @QUOTED_IDENTIFIER = 'ON';
END
SELECT @QUOTED_IDENTIFIER AS QUOTED_IDENTIFIER;
Разрешения
Необходимо быть членом роли public.
Примеры
А. Использование параметра идентификатора с кавычками и зарезервированных имен объектов word
В следующем примере показано, что параметр SET QUOTED_IDENTIFIER должен иметь значение ON, а ключевые слова в именах таблиц должны быть заключены в двойные кавычки, чтобы создать и использовать объекты, содержащие в именах зарезервированные ключевые слова.
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. Использование параметра идентификатора кавычки с одними и двойными кавычками
В этом примере показано, как используются двойные и одинарные кавычки в строковых выражениях, если параметру SET QUOTED_IDENTIFIER присвоено значение ON и значение 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
Вот результирующий набор.
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
Связанный контент
- СОЗДАТЬ БАЗУ ДАННЫХ
- CREATE DEFAULT (Transact-SQL)
- СОЗДАТЬ ПРОЦЕДУРУ (Transact-SQL)
- CREATE RULE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE TRIGGER (Transact-SQL)
- СОЗДАТЬ ВИД (Transact-SQL)
- Типы данных (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- Инструкции SET (Transact-SQL)
- SET ANSI_DEFAULTS (Transact-SQL)
- sp_rename
- Идентификаторы базы данных