Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL аналитика в Microsoft Fabric
Хранилище в Microsoft Fabric
SQL база данных в Microsoft Fabric
Имя объекта базы данных — это его идентификатор.
Серверам, базам данных и объектам баз данных, например, таким как таблицы, представления, столбцы, индексы, триггеры, процедуры, ограничения и правила, могут присваиваться идентификаторы. Большинство объектов требуют идентификаторов, но некоторые объекты, такие как ограничения, делают их необязательными.
При определении объекта создается идентификатор объекта. Используйте идентификатор для ссылки на объект. Например, следующая инструкция создает таблицу с идентификатором TableXи двумя столбцами с идентификаторами KeyCol и Description:
CREATE TABLE TableX
(
KeyCol INT PRIMARY KEY,
Description NVARCHAR (80)
);
Эта таблица имеет неназванное ограничение. Ограничение первичного ключа не имеет идентификатора пользователя, поэтому система назначает ему созданное имя, например PK__TableX__D7CB9CCCEEF0806C. Это имя можно увидеть в представлениях системных метаданных, таких как sys.key_constraints.
Имена ограничений и другие объекты с областью действия схемы должны быть уникальными в схеме базы данных. Например, два ограничения первичного ключа не могут иметь одинаковое имя. Однако имена столбцов должны быть уникальными только в каждой таблице, а не в схеме.
Способ сортировки идентификатора зависит от уровня, на котором вы его определяете.
Параметры сортировки экземпляра по умолчанию назначаются идентификаторам объектов уровня экземпляра, таким как имена входа и базы данных.
Параметры сортировки по умолчанию базы данных назначаются идентификаторам объектов в базе данных, например таблицам, представлениям и именам столбцов. Например, можно создать две таблицы с именами, которые различаются только регистром, в базе данных с чувствительным к регистру упорядочиванием, но нельзя создать их в базе данных с нечувствительным к регистру упорядочиванием.
Note
Имена переменных или параметры функций и хранимых процедур должны соответствовать правилам для Transact-SQL идентификаторов.
Классы идентификаторов
Существует два класса идентификаторов.
Регулярные идентификаторы соответствуют правилам формата для идентификаторов. Они не разграничиваются при использовании в операторах Transact-SQL. Регулярные идентификаторы должны соответствовать правилам регулярных идентификаторов: они могут содержать только буквы, цифры и определенные символы (
_,@#$), должны начинаться с буквы или одного из_,@#и не могут быть зарезервированным словом.USE AdventureWorks2025; GO SELECT * FROM HumanResources.Employee WHERE NationalIDNumber = 153479919;Идентификаторы с разделителями заключены в двойные кавычки (
") или квадратные скобки ([и]). Разделители позволяют использовать имена, которые в противном случае будут недопустимыми как обычные идентификаторы, такие как зарезервированные ключевые слова, имена с пробелами или именами с особыми символами. Идентификаторы, которые уже соответствуют правилам регулярного идентификатора, также могут быть разделены, но разделители являются необязательными в этом случае. Дополнительные сведения см. в разделе "Правила" для идентификаторов с разделителями.USE AdventureWorks2025; GO SELECT * FROM [HumanResources].[Employee] --Delimiter is optional. WHERE [NationalIDNumber] = 153479919; --Delimiter is optional.
Идентификаторы, которые не соответствуют правилам регулярных идентификаторов, должны быть разделены в инструкции Transact-SQL. Рассмотрим пример.
USE AdventureWorks2025;
GO
--Identifier contains a space and uses a reserved keyword.
CREATE TABLE [SalesOrderDetail Table]
(
[Order] INT NOT NULL,
[SalesOrderDetailID] INT IDENTITY (1, 1) NOT NULL,
[OrderQty] SMALLINT NOT NULL,
[ProductID] INT NOT NULL,
[UnitPrice] MONEY NOT NULL,
[UnitPriceDiscount] MONEY NOT NULL,
[ModifiedDate] DATETIME NOT NULL,
CONSTRAINT [PK_SalesOrderDetail_Order_SalesOrderDetailID] PRIMARY KEY CLUSTERED
(
[Order] ASC,
[SalesOrderDetailID] ASC
)
);
GO
SELECT *
FROM [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
WHERE [Order] = 10; --Identifier is a reserved keyword.
И обычные идентификаторы, и идентификаторы с разделителями должны содержать от 1 до 128 символов. Для локальных временных таблиц идентификатор может содержать не более 116 символов.
Правила для идентификаторов с делимитерами
Идентификаторы с разделителями заключены в квадратные скобки ([ и ]) или в двойные кавычки ("). Они могут содержать любое сочетание символов, включая пробелы, зарезервированные ключевые слова и специальные символы, которые не допускаются в регулярных идентификаторах.
Идентификаторы с разделителями в скобках
Идентификаторы с разделителями скобки заключены в квадратные скобки ([ и ]). Если идентификатор содержит правую скобку (]), экранируйте его, удвоив его (]]). Левая скобка ([) не требует экранирования.
Например, чтобы создать и запросить таблицу, имя которой содержит квадратные скобки:
-- Create a table with a ] character in its name.
CREATE TABLE [My]]Table]
(
ID INT PRIMARY KEY
);
GO
-- Reference the table in a query.
SELECT *
FROM [My]]Table];
GO
Функция QUOTENAME возвращает корректный идентификатор в квадратных скобках для заданной строки и автоматически выполняет экранирование.
SELECT QUOTENAME('abc[]def');
В предыдущем примере возвращается [abc[]]def].
Идентификаторы в двойных кавычках
Идентификаторы с разделителями-двойными кавычками заключены в двойные кавычки ("). Если идентификатор сам содержит двойную кавычку, экранируйте её, удвоив её ("").
Разделители двойных кавычек требуют SET QUOTED_IDENTIFIER ON (этот вариант используется по умолчанию для большинства подключений). Если QUOTED_IDENTIFIEROFF, ядро СУБД обрабатывает строки с двойными кавычками как строковые литералы вместо идентификаторов. Дополнительные сведения см. в SET QUOTED_IDENTIFIER.
Например, чтобы создать и запросить таблицу, которая использует зарезервированные ключевые слова в качестве идентификаторов:
SET QUOTED_IDENTIFIER ON;
GO
-- Create a table using double-quote delimiters.
CREATE TABLE "My Table"
(
"Order" INT NOT NULL,
"Description" NVARCHAR (100)
);
GO
SELECT "Order",
"Description"
FROM "My Table";
GO
Note
SET QUOTED_IDENTIFIER не влияет на идентификаторы с разделителями-скобками. Разделители квадратных скобок всегда работают независимо от QUOTED_IDENTIFIER параметра.
Правила для обычных идентификаторов
Имена переменных, функций и хранимых процедур должны соответствовать этим правилам для идентификаторов Transact-SQL.
Первый символ должен быть одним из следующих символов:
Буква в соответствии со стандартом Unicode Standard 3,2. Определение букв Юникода включает в себя латинские символы, начиная от
azи доAZ, а также буквы из других языков.Знак подчеркивания (
_@), знак () или номерной знак (#).Некоторые символы в начале идентификатора имеют особое значение в ядро СУБД. Обычный идентификатор, начинающийся с знака, всегда обозначает локальную переменную или параметр и не может использоваться в качестве имени любого другого типа объекта. Идентификатор, начинающийся символом решетки (#), означает временную таблицу или процедуру. Идентификатор, начинающийся с двойных знаков чисел (
##) обозначает глобальный временный объект. Хотя символы знака номера или знака двойного номера можно использовать для начала имен других типов объектов, следует избежать этой практики.Некоторые функции Transact-SQL имеют имена, начинающиеся с двойных знаков (
@@). Чтобы избежать путаницы с этими функциями, не используйте имена, начинающиеся с@@.
Последующие символы могут содержать следующий список:
Буквы в соответствии со стандартом Unicode Standard 3,2.
Десятичные цифры из набора символов Basic Latin или другого набора символов национального языка.
Знак '@' (
@), знак доллара ($), символ # (#) или символ подчеркивания (_).
Идентификатор не должен быть Transact-SQL зарезервированным словом. СУБД резервирует прописные и строчные версии зарезервированных слов. При использовании идентификаторов в операторах Transact-SQL, заключайте в двойные кавычки или квадратные скобки те идентификаторы, которые не соответствуют этим правилам. Состав зарезервированных слов зависит от уровня совместимости базы данных. Задайте уровень совместимости базы данных с помощью инструкции ALTER DATABASE о совместимости.
Не используйте внедренные пробелы или специальные символы.
Не используйте дополнительные символы.
При использовании идентификаторов в операторах Transact-SQL разделяйте идентификаторы, которые не соответствуют этим правилам, с помощью двойных кавычек или квадратных скобок. Некоторые из этих правил зависят от уровня совместимости базы данных.
Сортировка каталога в База данных SQL Azure
Невозможно изменить или задать параметры сортировки логического сервера в База данных SQL Azure. Однако параметры сортировки каждой базы данных можно настроить отдельно для данных в базе данных и для каталога. Колляция каталога определяет способы упорядочивания для системных метаданных, таких как идентификаторы объектов. Параметры сортировки можно указать независимо при создании базы данных на портале Azure, в Transact-SQL (T-SQL) с CREATE DATABASE или в PowerShell с New-AzSqlDatabase.
Дополнительные сведения и примеры см. в статье CREATE DATABASE. Укажите параметры сортировки для базы данных (COLLATE) и параметры сортировки каталога для системных метаданных и идентификаторов объектов (CATALOG_COLLATION).
Сопоставление каталога в базе данных SQL в Microsoft Fabric
Параметры сортировки по умолчанию для базы данных SQL в Fabric — SQL_Latin1_General_CP1_CI_AS. Вы можете настроить другое сопоставление во время развертывания, но изменить его после создания базы данных невозможно. Отдельные столбцы могут использовать собственные параметры сортировки. Дополнительные сведения о параметрах развертывания см. в разделе Options, чтобы создать базу данных SQL в Fabric.