Добавление строки в SQL таблицу с одной колонкой IDENTITY
Быстрый ответ
Чтобы добавить новую запись в таблицу, которая состоит исключительно из столбца IDENTITY, следует использовать команду INSERT с ключевым словом DEFAULT VALUES:
-- Образец простого и эффективного решения!
INSERT INTO ВашаТаблица DEFAULT VALUES;
SQL Server автоматически создаст и присвоит следующий уникальный идентификатор для новой записи.
Подробное объяснение
DEFAULT VALUES
особенно пригодится, когда речь идет о таблице с единственным столбцом IDENTITY, который служит уникальным идентификатором и, как правило, является первичным ключом.
Ключевое слово DEFAULT VALUES
указывает SQL Server на необходимость присвоения стандартных значений для всех столбцов. В контексте столбца IDENTITY сервер генерирует и присваивает следующий номер из своей внутренней последовательности.
Скажем, вы столкнулись с рутинной задачей многократной вставки. И вам нужно решение, которое позволит выполнить массовую операцию:
-- Добиваемся большего, практически без дополнительных усилий.
INSERT INTO ВашаТаблица DEFAULT VALUES;
GO 10
В данном примере GO
разделяет команды на управляемые пакеты и указывает SQL Server, сколько раз нужно выполнить данную операцию — в нашем случае 10 раз.
Визуализация
Представьте себе клуб, куда можно попасть только с членской картой:
Таблица Клуба: [🚪]
Для входа вам требуется уникальная карта. Вот как просто получить её:
-- Почти волшебный код, открывающий доступ!
INSERT INTO ТаблицаКлуба DEFAULT VALUES;
Теперь у вас есть персональный пропуск:
Выданная Членская карта: [#️⃣]
Просто. Быстро. Вы уже внутри. 🎉
Таблица Клуба ПОСЛЕ: [🚪, #️⃣]
Разбор сложных моментов
Работа со столбцами IDENTITY может привести к некоторым сложностям:
Новое начало: Если необходимо сбросить счётчик идентификаторов и начать нумерацию с нового значения:
-- Инициируем сброс счетчика идентификаторов. DBCC CHECKIDENT ('ВашаТаблица', RESEED, НовоеЗначениеСброса);
Пробелы в нумерации идентификаторов: При массовых вставках в случае прерывания или отката процесса может нарушаться последовательность идентификаторов. Однако, не стоит беспокоиться: номера IDENTITY не обязательно должны образовывать непрерывную последовательность.
Удаление записей: При удалении записей между идентификаторами появляются пробелы. Имеются альтернативные варианты решения этой проблемы, например использование объекта последовательности, или написание собственного алгоритма для поддержки целостности последовательности.
Перенос данных с сохранением значений идентификаторов — задача не из простых. Если необходимо сохранить идентификаторы, временно активируется
IDENTITY_INSERT
:-- Временно берем на себя контроль над идентификаторами. SET IDENTITY_INSERT ВашаТаблица ON; INSERT INTO ВашаТаблица (ИмяСтолбцаИдентификатора) VALUES (ЯвноеЗначениеИдентификатора); SET IDENTITY_INSERT ВашаТаблица OFF;
Обратите внимание, что задание определенных значений столбцу типа IDENTITY возможно только для одной таблицы за раз и требует соответствующих прав доступа.
Повышаем уровень SQL
Чтобы операции вставки в столбцы IDENTITY были максимально эффективны и свободны от ошибок, обратите внимание на следующие рекомендации:
Блокировки: Таблицы с большим трафиком транзакций часто подвержены блокировкам. Используйте
DEFAULT VALUES
для сокращения объема транзакций и минимизации вероятности блокировок.Подготовка: Убедитесь, что ваши операции вставки либо полностью исполняются, либо полностью отклоняются, объединив их в одну транзакцию.
Внимательность: Не забывайте параметр IDENTITY_CACHE, который может быть активирован в вашем экземпляре SQL Server. Он может влиять на значения IDENTITY при авариях.
Полезные материалы
- INSERT (Transact-SQL) – SQL Server | Microsoft Learn — Официальный источник с описанием команды INSERT, взятый из документации Microsoft.
- sql – Adding an identity to an existing column – Stack Overflow — Опыт сообщества по теме добавления IDENTITY.
- SQL Server INSERT INTO Table with Only Identity Column – SQL Authority Blog — Практические советы по вставке данных в столбец с идентификаторами.
- Tutorial Gateway – SQL IDENTITY COLUMN — Изучаем SQL IDENTITY на практических примерах.
- SQLTeam Forum Discussion on INSERT with IDENTITY column — Обсуждение на форуме о различных методах вставки данных с использованием столбцов IDENTITY.