Добавление строки в SQL таблицу с одной колонкой IDENTITY

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы добавить новую запись в таблицу, которая состоит исключительно из столбца IDENTITY, следует использовать команду INSERT с ключевым словом DEFAULT VALUES:

SQL
Скопировать код
-- Образец простого и эффективного решения!
INSERT INTO ВашаТаблица DEFAULT VALUES;

SQL Server автоматически создаст и присвоит следующий уникальный идентификатор для новой записи.

Кинга Идем в IT: пошаговый план для смены профессии

Подробное объяснение

DEFAULT VALUES особенно пригодится, когда речь идет о таблице с единственным столбцом IDENTITY, который служит уникальным идентификатором и, как правило, является первичным ключом.

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

Скажем, вы столкнулись с рутинной задачей многократной вставки. И вам нужно решение, которое позволит выполнить массовую операцию:

SQL
Скопировать код
-- Добиваемся большего, практически без дополнительных усилий. 
INSERT INTO ВашаТаблица DEFAULT VALUES;
GO 10

В данном примере GO разделяет команды на управляемые пакеты и указывает SQL Server, сколько раз нужно выполнить данную операцию — в нашем случае 10 раз.

Визуализация

Представьте себе клуб, куда можно попасть только с членской картой:

Markdown
Скопировать код
Таблица Клуба: [🚪]

Для входа вам требуется уникальная карта. Вот как просто получить её:

SQL
Скопировать код
-- Почти волшебный код, открывающий доступ!
INSERT INTO ТаблицаКлуба DEFAULT VALUES;

Теперь у вас есть персональный пропуск:

Markdown
Скопировать код
Выданная Членская карта: [#️⃣]

Просто. Быстро. Вы уже внутри. 🎉

Markdown
Скопировать код
Таблица Клуба ПОСЛЕ: [🚪, #️⃣]

Разбор сложных моментов

Работа со столбцами IDENTITY может привести к некоторым сложностям:

  • Новое начало: Если необходимо сбросить счётчик идентификаторов и начать нумерацию с нового значения:

    SQL
    Скопировать код
    -- Инициируем сброс счетчика идентификаторов.
    DBCC CHECKIDENT ('ВашаТаблица', RESEED, НовоеЗначениеСброса);
  • Пробелы в нумерации идентификаторов: При массовых вставках в случае прерывания или отката процесса может нарушаться последовательность идентификаторов. Однако, не стоит беспокоиться: номера IDENTITY не обязательно должны образовывать непрерывную последовательность.

  • Удаление записей: При удалении записей между идентификаторами появляются пробелы. Имеются альтернативные варианты решения этой проблемы, например использование объекта последовательности, или написание собственного алгоритма для поддержки целостности последовательности.

  • Перенос данных с сохранением значений идентификаторов — задача не из простых. Если необходимо сохранить идентификаторы, временно активируется IDENTITY_INSERT:

    SQL
    Скопировать код
    -- Временно берем на себя контроль над идентификаторами.
    SET IDENTITY_INSERT ВашаТаблица ON;
    
    INSERT INTO ВашаТаблица (ИмяСтолбцаИдентификатора)
    VALUES (ЯвноеЗначениеИдентификатора);
    
    SET IDENTITY_INSERT ВашаТаблица OFF;

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

Повышаем уровень SQL

Чтобы операции вставки в столбцы IDENTITY были максимально эффективны и свободны от ошибок, обратите внимание на следующие рекомендации:

  • Блокировки: Таблицы с большим трафиком транзакций часто подвержены блокировкам. Используйте DEFAULT VALUES для сокращения объема транзакций и минимизации вероятности блокировок.

  • Подготовка: Убедитесь, что ваши операции вставки либо полностью исполняются, либо полностью отклоняются, объединив их в одну транзакцию.

  • Внимательность: Не забывайте параметр IDENTITY_CACHE, который может быть активирован в вашем экземпляре SQL Server. Он может влиять на значения IDENTITY при авариях.

Полезные материалы

  1. INSERT (Transact-SQL) – SQL Server | Microsoft LearnОфициальный источник с описанием команды INSERT, взятый из документации Microsoft.
  2. sql – Adding an identity to an existing column – Stack OverflowОпыт сообщества по теме добавления IDENTITY.
  3. SQL Server INSERT INTO Table with Only Identity Column – SQL Authority BlogПрактические советы по вставке данных в столбец с идентификаторами.
  4. Tutorial Gateway – SQL IDENTITY COLUMN — Изучаем SQL IDENTITY на практических примерах.
  5. SQLTeam Forum Discussion on INSERT with IDENTITY columnОбсуждение на форуме о различных методах вставки данных с использованием столбцов IDENTITY.