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

Изменения: 14 апреля 2006 г.

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

Свойство IDENTITY

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

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

  • таблица может содержать только один столбец со свойством IDENTITY, причем такой столбец должен иметь тип данных decimal, int, numeric, smallint, bigint или tinyint;
  • можно указать начальное значение и шаг. Значение по умолчанию для обоих равно 1;
  • столбец идентификатора не должен допускать значений NULL и содержать определений или объектов по умолчанию;
  • ссылку на столбец в списке выборки можно создать с помощью указания ключевого слова $IDENTITY после свойства IDENTITY. Сослаться на столбец можно также при помощи имени;
  • функцию OBJECTPROPERTY можно использовать для определения наличия в таблице столбца со свойством IDENTITY, а функция COLUMNPROPERTY может быть использована для определения имени столбца со свойством IDENTITY;
  • чтобы отключить свойство IDENTITY для столбца, можно использовать инструкцию SET IDENTITY_INSERT, активируя значения, которые должны быть вставлены явным образом.
    ms191131.note(ru-ru,SQL.90).gifПримечание.
    Если в таблице, в которой часто производятся удаления, имеется столбец идентификаторов, между значениями идентификатора могут возникнуть промежутки. Удаленные значения идентификаторов повторно не используются. Чтобы избежать возникновения таких промежутков, не используйте свойство IDENTITY. Вместо этого можно создать триггер, который определяет новое значение идентификатора на основе существующих значений в столбцах идентификатора по мере вставки строк.

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

Несмотря на то, что свойство IDENTITY автоматизирует нумерацию строк в рамках одной таблицы, разные таблицы, каждая со своим столбцом идентификаторов, могут создавать одинаковые значения. Это обусловлено тем, что уникальность свойства IDENTITY гарантирована только в рамках таблицы, в которой оно использовано. Если в приложении нужно сформировать столбец идентификатора, уникальный для всей базы данных или всех баз данных во всех сетях компьютеров в мире, используйте тип данных uniqueidentifier и функцию NEWID (Transact-SQL) или NEWSEQUENTIALID(). Database Engine не формирует значения для этого столбца автоматически. Чтобы вставить глобальное уникальное значение, создайте для столбца определение DEFAULT, которое использует функцию NEWID или NEWSEQUENTIALID для формирования глобального уникального значения.

Ссылку на столбец в списке выборки можно создать с помощью указания ключевого слова $ROWGUID после свойства ROWGUIDCOL. Это аналогично ссылке на столбец 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)

См. также

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

Автоматическая нумерация и столбцы идентификаторов
Использование данных uniqueidentifier

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

COLUMNPROPERTY (Transact-SQL)
NEWID (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
uniqueidentifier (Transact-SQL)
Репликация столбцов идентификаторов

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

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

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

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

14 апреля 2006 г.

Измененное содержимое:
  • Удалено содержимое об использовании ограничений UNIQUE со столбцами ROWGUID.
  • Прояснена цель использования свойства ROWGUIDCOL.
Новое содержимое
  • Добавлены ссылки на использование NEWSEQUENTIALID в дополнение к NEWID при создании столбца GUID.
  • Добавлен пример создания таблицы со столбцом GUID.

5 декабря 2005 г.

Новое содержимое
  • Добавлены сведения о добавлении столбцов идентификаторов к существующим таблицам, и объяснено, что свойство IDENTITY нельзя добавить к существующему столбцу.