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

Изменения: 12 декабря 2006 г.

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

Идентификатор объекта создается при определении объекта. Затем идентификатор используется для обращения к объекту. Например, следующая инструкция создает таблицу с идентификатором 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 символов.

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

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

  1. Первым символом должен быть один из следующих:
    • буква, определенная стандартом Юникод 3.2. Определения букв в стандарте Юникод включают латинские символы от «a» до «z», от «A» до «Z», а также буквенные символы других языков;
    • подчеркивание (_), символ @ или решетка (#).
      Определенные символы в начале идентификатора в SQL Server имеют особое значение. Обычный идентификатор, начинающийся символом @, означает локальную переменную или параметр и не может использоваться в качестве имени объекта какого-либо иного типа. Идентификатор, начинающийся символом решетки (#), означает временную таблицу или процедуру. Идентификатор, начинающийся двойным символом решетки (##), означает глобальный временный объект. Хотя символы решетки и двойной решетки могут использоваться в начале имен объектов других типов, мы не рекомендуем такой способ именования.
      Некоторые функции языка Transact-SQL имеют имена, начинающиеся с двойного символа «@» (@@). Во избежание путаницы с этими функциями не следует использовать имена, начинающиеся символами @@.
  2. Последующие символы могут включать:
    • буквы, определенные стандартом Юникод 3.2;
    • десятичные цифры как из базового набора символов для латинского алфавита, так и для любого другого национального алфавита;
    • символ @, знак доллара ($), решетка или подчеркивание.
  3. Идентификатор не может быть зарезервированным словом языка Transact-SQL. В сервере SQL Server применяются версии зарезервированных слов как верхнего, так и нижнего регистров.
  4. Внедренные символы пробела или специальные символы не разрешены.
  5. Дополнительные символы недопустимы.

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

ms175874.note(ru-ru,SQL.90).gifПримечание.
Имена переменных и имена параметров хранимых процедур всегда должны соответствовать правилам для обычных идентификаторов.

См. также

Основные понятия

Идентификаторы с разделителями (компонент Database Engine)

Другие ресурсы

ALTER TABLE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
CREATE RULE (Transact-SQL)
CREATE TABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DELETE (Transact-SQL)
INSERT (Transact-SQL)
Зарезервированные ключевые слова (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлено правило о том, что дополнительные символы недопустимы в обычных идентификаторах.

14 апреля 2006 г.

Измененное содержимое
  • Дано пояснение использования специальных символов в обычных идентификаторах.