Published on

April 27, 2020

Генерация ключевых значений в SQL Server

При работе с таблицами SQL Server доступно несколько методов для генерации ключевых значений. В этой статье мы рассмотрим один из самых ранних и простых подходов – свойство столбца IDENTITY.

Свойство столбца IDENTITY указывается в команде CREATE TABLE или может быть добавлено к существующей таблице с помощью команды ALTER TABLE. Это свойство указывает SQL Server автоматически генерировать значения для определенного столбца. Каждая новая строка, вставленная в таблицу, будет назначена уникальным номером, начиная с указанного начального значения и увеличиваясь с интервалами, определяемыми значением приращения.

Давайте рассмотрим пример:

CREATE TABLE Employees
(
    ID INT IDENTITY(1, 1),
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    HireDate DATETIME
);

INSERT INTO Employees (FirstName, LastName, HireDate)
VALUES ('John', 'Doe', '2020-01-01');

SELECT * FROM Employees;

В приведенном выше примере мы создаем таблицу с именем “Employees” с определенным столбцом ID в качестве столбца IDENTITY. Когда мы вставляем новую строку в таблицу без указания значения для столбца ID, SQL Server автоматически генерирует уникальный ID для этой строки. Затем мы можем получить все строки из таблицы с помощью оператора SELECT.

Важно отметить, что свойство IDENTITY может использоваться только для столбцов с числовыми типами данных, такими как INT или BIGINT. Необходимо указывать значение для столбца IDENTITY при вставке строк, так как SQL Server автоматически обрабатывает генерацию уникальных значений.

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

SET IDENTITY_INSERT Employees ON;

INSERT INTO Employees (ID, FirstName, LastName, HireDate)
VALUES (100, 'Jane', 'Smith', '2020-02-01');

SET IDENTITY_INSERT Employees OFF;

Установив IDENTITY_INSERT ON, мы можем вручную вставить строку в таблицу Employees и указать значение для столбца ID. После завершения ручных вставок мы можем отключить опцию IDENTITY_INSERT.

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

Еще одно соображение при работе со столбцами IDENTITY заключается в том, что удаление строк из таблицы может создавать “пробелы” в последовательности сгенерированных значений. Например:

DELETE FROM Employees WHERE ID = 2;

SELECT * FROM Employees;

В приведенном выше примере мы удаляем строку с ID 2 из таблицы Employees. В результате в последовательности значений ID теперь есть пропуск. Важно помнить об этом при использовании столбцов IDENTITY, чтобы убедиться, что наибольшее значение столбца не указывает на количество строк в таблице.

SQL Server предоставляет несколько функций, связанных со столбцами IDENTITY, таких как @@IDENTITY и SCOPE_IDENTITY. Эти функции позволяют получить последнее вставленное значение в сеансе или в определенной области видимости соответственно.

В заключение, свойство столбца IDENTITY является простым и легким в реализации методом для генерации ключевых значений в таблицах SQL Server. Хотя существуют более эффективные методы, такие как функция NEWID() и последовательности, свойство IDENTITY все еще является приемлемым вариантом для небольших проектов или когда предпочтительна простота.

Ссылки:

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.