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

Применимо к: SQL Server (все поддерживаемые версии) Azure SQL database Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

USE AdventureWorks
GO
CREATE TABLE [SalesOrderDetail Table] --Identifier contains a space and uses a reserved keyword.
(
	[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.

См. также:

ALTER TABLE (Transact-SQL)
CREATE DATABASE (SQL Server 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)