Создание и изменение столбцов идентификаторов

Для создания автоматически увеличивающегося идентификационного номера в таблице можно использовать столбец идентификаторов. Для каждой таблицы можно создать только один столбец идентификаторов и один столбец идентификаторов GUID.

Свойство IDENTITY

Реализовать столбцы идентификаторов можно при помощи свойства IDENTITY. Это позволяет разработчику указать как количество идентификаторов для первой строки, вставляемой в таблицу (свойство Начальное значение идентификатора), так и увеличение (свойство Шаг приращения идентификатора), добавляемое к начальному значению для определения последующих номеров идентификаторов. При вставке значений в таблицу со столбцом идентификаторов компонента Database Engine автоматически формирует следующее значение идентификатора, добавляя значение шага приращения идентификатора к начальному значению. При добавлении столбцов идентификатора к существующим таблицам идентификационные номера добавляются в существующие строки таблицы. При этом начальное значение и значения приращения применяются в том же порядке, в котором строки были вставлены. Номера идентификаторов также формируются для всех новых строк, которые добавляются. Нельзя изменить существующий столбец таблицы, добавив в него свойство IDENTITY.

Если для определения столбца идентификаторов используется свойство IDENTITY, необходимо помнить следующее:

  • таблица может содержать только один столбец со свойством IDENTITY, причем такой столбец должен иметь тип данных decimal, int, numeric, smallint, bigint или tinyint;

  • можно указать начальное значение и шаг. Значение по умолчанию для обоих равно 1;

  • столбец идентификатора не должен допускать значений NULL и содержать определений или объектов по умолчанию;

  • ссылку на столбец в списке выборки можно создать с помощью указания ключевого слова $IDENTITY после свойства IDENTITY. Сослаться на столбец можно также при помощи имени;

  • функцию OBJECTPROPERTY можно использовать для определения наличия в таблице столбца со свойством IDENTITY, а функция COLUMNPROPERTY может быть использована для определения имени столбца со свойством IDENTITY;

  • чтобы отключить свойство IDENTITY для столбца, можно использовать инструкцию SET IDENTITY_INSERT, активируя значения, которые должны быть вставлены явным образом.

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

    Если в таблице, в которой часто производятся удаления, имеется столбец идентификаторов, между значениями идентификатора могут возникнуть промежутки. Удаленные значения идентификаторов повторно не используются. Чтобы избежать возникновения таких промежутков, не используйте свойство IDENTITY. Вместо этого можно создать триггер, который определяет новое значение идентификатора на основе существующих значений в столбцах идентификатора по мере вставки строк.

Глобальные уникальные идентификаторы

Несмотря на то, что свойство IDENTITY автоматизирует нумерацию строк в рамках одной таблицы, разные таблицы, каждая со своим столбцом идентификаторов, могут создавать одинаковые значения. Это обусловлено тем, что уникальность свойства IDENTITY гарантирована только в рамках таблицы, в которой оно использовано. Если в приложении нужно сформировать столбец идентификатора, уникальный для всей базы данных или всех баз данных во всех сетях компьютеров в мире, используется тип данных uniqueidentifier и функция NEWID или NEWSEQUENTIALID(). Кроме того, можно применить свойство ROWGUIDCOL, чтобы указать, что новый столбец является столбцом идентификаторов GUID строк. В отличие от столбцов, определенных с помощью свойства IDENTITY, компонент Database Engine не создает автоматически значения для столбцов с типом данных uniqueidentifier. Чтобы вставить глобальное уникальное значение, создайте для столбца определение DEFAULT, которое использует функцию NEWID или NEWSEQUENTIALID для формирования глобального уникального значения. Дополнительные сведения см. в разделе Использование данных uniqueidentifier.

На столбец со свойством ROWGUICOL можно ссылаться в списке выбора, используя ключевое слово $ROWGUID. Это аналогично ссылке на столбец IDENTITY при помощи ключевого слова $IDENTITY; в таблице может содержаться только один столбец ROWGUIDCOL, который должен иметь тип данных uniqueidentifier. Функцию OBJECTPROPERTY (Transact-SQL) можно использовать для определения наличия в таблице столбца со свойством ROWGUIDCOL, а функция COLUMNPROPERTY (Transact-SQL) может быть использована для определения имени столбца со свойством ROWGUIDCOL.

В следующем примере создается таблица с указанием столбца uniqueidentifier в качестве первичного ключа. Пример использует функцию NEWSEQUENTIALID() с ограничением DEFAULT для задания значений для новых строк. К столбцу uniqueidentifier применяется свойство ROWGUIDCOL, так что на столбец можно ссылаться с помощью ключевого слова $ROWGUID.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

Создание нового столбца идентификаторов при создании таблицы

Инструкция CREATE TABLE (Transact-SQL)

Создание столбца идентификаторов в существующей таблице

ALTER TABLE (Transact-SQL)

Удаление столбца идентификаторов

ALTER TABLE (Transact-SQL)

Как удалять столбцы из таблицы (визуальные инструменты для баз данных)

Получение сведений о столбце идентификаторов

sys.identity_columns (Transact-SQL)

IDENT_INCR (Transact-SQL)

IDENT_SEED (Transact-SQL)

Проверка и исправление текущего значения идентификатора заданной таблицы

DBCC CHECKIDENT (Transact-SQL)

Установка нового начального значения

DBCC CHECKIDENT (Transact-SQL)