Идентификаторы базы данных

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric

Имя объекта базы данных называется его идентификатором. Все в SQL Server может иметь идентификатор. серверам, базам данных и их объектам, например таблицам, представлениям, столбцам, индексам, триггерам, процедурам, ограничениям и правилам. Для большинства объектов идентификаторы необходимы, а для некоторых, например ограничений, необязательны.

Идентификатор объекта создается при определении объекта. Затем идентификатор используется для обращения к объекту. Например, следующая инструкция создает таблицу с идентификатором TableXи двумя столбцами с идентификаторами KeyCol и Description:

CREATE TABLE TableX (
    KeyCol INT PRIMARY KEY,
    Description NVARCHAR(80)
);

Эта таблица также содержит безымянное ограничение. Ограничение PRIMARY KEY не имеет идентификатора.

Параметры сортировки идентификатора зависят от уровня, на котором он определен. К идентификаторам объектов на уровне экземпляров, таких как имена входа и имена базы данных, применяются параметры сортировки по умолчанию для экземпляра. Идентификаторам объектов в пределах базы данных, например таблиц, представлений или имен столбцов, назначаются параметры сортировки, установленные по умолчанию для базы данных. Например, две таблицы с именами, которые отличаются только в случае, можно создать в базе данных, которая имеет параметры сортировки с учетом регистра, но не может быть создана в базе данных с нечувствительными параметрами сортировки регистра.

Примечание.

Имена переменных или параметры функций и хранимых процедур должны соответствовать правилам идентификаторов Transact-SQL.

Классы идентификаторов

Существует два класса идентификаторов.

  • Регулярные идентификаторы соответствуют правилам формата идентификаторов. Регулярные идентификаторы не разделяются при использовании в инструкциях Transact-SQL.

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM HumanResources.Employee
    WHERE NationalIDNumber = 153479919;
    
  • Идентификаторы с разделителями заключены в двойные кавычки (") или квадратные скобки ([ и ]). Идентификаторы, которые соответствуют правилам форматирования идентификаторов, могут быть не разделяемыми. Например:

    USE AdventureWorks2022;
    GO
    
    SELECT *
    FROM [HumanResources].[Employee] --Delimiter is optional.
    WHERE [NationalIDNumber] = 153479919 --Delimiter is optional.
    

Идентификаторы, которые не соответствуют всем правилам идентификаторов, должны быть разделены в инструкции Transact-SQL. Например:

USE AdventureWorks2022;
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 символов.

Правила для обычных идентификаторов

Имена переменных, функций и хранимых процедур должны соответствовать следующим правилам для идентификаторов Transact-SQL.

  1. Первый символ должен быть одним из следующих элементов:

    • Буква в соответствии со стандартом Unicode Standard 3,2. Определение букв Юникода включает в себя латинские символы, начиная от a zи до A Z, а также буквы из других языков.

    • Знак подчеркивания (_@), знак () или номерной знак (#).

      Некоторые символы в начале идентификатора имеют особое значение в SQL Server. Обычный идентификатор, начинающийся с знака, всегда обозначает локальную переменную или параметр и не может использоваться в качестве имени любого другого типа объекта. Идентификатор, начинающийся символом решетки (#), означает временную таблицу или процедуру. Идентификатор, начинающийся с двойных знаков чисел (##) обозначает глобальный временный объект. Хотя знак номера или символы двойного номера можно использовать для начала имен других типов объектов, мы не рекомендуем использовать эту практику.

      Некоторые функции Transact-SQL имеют имена, начинающиеся с двойных знаков (@@). Чтобы избежать путаницы с этими функциями, не следует использовать имена, начинающиеся с @@.

  2. Последующие символы могут содержать следующий список:

    • Буквы в соответствии со стандартом Unicode Standard 3,2.

    • Десятичные цифры из набора символов Basic Latin или другого набора символов национального языка.

    • Знак при входе (), знак доллара (@$), знак номера (#) или символ подчеркивания (_).

  3. Идентификатор не должен быть зарезервированным словом Transact-SQL. SQL Server резервирует как верхний регистр, так и строчные версии зарезервированных слов. Если идентификаторы используются в инструкциях Transact-SQL, идентификаторы, которые не соответствуют этим правилам, должны быть разделены двойными кавычками или скобками. Состав зарезервированных слов зависит от уровня совместимости базы данных. Этот уровень можно задать с помощью инструкции уровня совместимости ALTER DATABASE.

  4. Внедренные пробелы или специальные символы не допускаются.

  5. Дополнительные символы не допускаются.

Если идентификаторы используются в инструкциях Transact-SQL, идентификаторы, которые не соответствуют этим правилам, должны быть разделены двойными кавычками или скобками.

Примечание.

Некоторые правила форматирования обычных идентификаторов зависят от уровня совместимости базы данных. Этот уровень можно задать с помощью уровня совместимости ALTER DATABASE.

Параметры сортировки каталога в База данных SQL Azure

Невозможно изменить или задать параметры сортировки логических серверов в База данных SQL Azure. Однако параметры сортировки каждой базы данных можно настроить отдельно для данных в базе данных и для каталога. Параметры сортировки каталога определяют параметры сортировки для системных метаданных, таких как идентификаторы объектов. Оба параметров сортировки можно задать независимо при создании базы данных в портал Azure в T-SQL с помощью CREATE DATABASE в PowerShell с new-AzSqlDatabase.

Дополнительные сведения и примеры см. в статье CREATE DATABASE. Укажите параметры сортировки для базы данных (COLLATE) и параметры сортировки каталога для системных метаданных и идентификаторов объектов (CATALOG_COLLATION).