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

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

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

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

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

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

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

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

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

    SELECT *
    FROM TableX
    WHERE KeyCol = 124
    
  • Идентификаторы с разделителем
    Заключаются в двойные кавычки (") или квадратные скобки ([ ]). Идентификаторы, которые соответствуют правилам форматирования идентификаторов, могут быть не разделяемыми. Например:

    SELECT *
    FROM [TableX]         --Delimiter is optional.
    WHERE [KeyCol] = 124  --Delimiter is optional.
    

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

    SELECT *
    FROM [My Table]      --Identifier contains a space and uses a reserved keyword.
    WHERE [order] = 10   --Identifier is a reserved keyword.
    

И обычные идентификаторы, и идентификаторы с разделителем могут содержать от 1 до 128 символов. Для локальных временных таблиц идентификатор может содержать не более 116 символов.

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

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

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

    • буква, определенная стандартом Юникод 3.2. Определения букв в стандарте Юникод включают латинские символы от «a» до «z», от «A» до «Z», а также буквенные символы других языков;

    • подчеркивание (_), символ @ или решетка (#).

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

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

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

    • буквы, определенные стандартом Юникод 3.2;

    • десятичные цифры как из базового набора символов для латинского алфавита, так и для любого другого национального алфавита;

    • символ @, знак доллара ($), решетка или подчеркивание.

  3. Идентификатор не может быть зарезервированным словом языка Transact-SQL. В сервере SQL Server применяются версии зарезервированных слов как верхнего, так и нижнего регистров.

  4. Внедренные символы пробела или специальные символы не разрешены.

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

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

ПримечаниеПримечание

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