Быстрое добавление и заполнение нового столбца ID в SQL Server
Быстрый ответ
Для добавления в таблицу столбца с автоинкрементом воспользуйтесь представленной ниже командой:
ALTER TABLE ВашаТаблица ADD НовыйIdСтолбец INT IDENTITY(1,1);
НовыйIdСтолбец
автоматически создаст уникальные последовательные целочисленные идентификаторы, начинающиеся с 1. Существующие данные при этом не будут задеты, а бремя ручного обновления снимется с управляющего SQL Server.
Соблюдение целостности данных
Для гарантии целостности базы данных рекомендуется сделать новый столбец с автоинкрементом основным ключом. Благодаря этому подходу можно исключить появление дублирующихся и пустых значений, а также можно улучшить производительность вследствие создания скрытого кластерного индекса.
ALTER TABLE ВашаТаблица ADD CONSTRAINT PK_ВашаТаблица PRIMARY KEY CLUSTERED (НовыйIdСтолбец);
Данная операция обеспечивает уникальность всех записей и исключает вероятность появления значений NULL.
Работа с большими таблицами: Безопасный подход
При работе с таблицами большого размера команда ALTER TABLE
может оказать негативное влияание на производительность. В этом случае представляется альтернативный подход: использование функции ROW_NUMBER()
и пересоздание таблицы:
/* Приступите к обеспечению безопасности */
BEGIN TRANSACTION;
/* Создайте копию исходной таблицы с дополнительным столбцом автоинкремента */
CREATE TABLE ВременнаяТаблица AS
SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS НовыйIdСтолбец
FROM ВашаТаблица;
/* Удалите старую таблицу */
DROP TABLE ВашаТаблица;
/* Переименуйте временную таблицу, восстанавливая изначальное название */
EXEC sp_rename 'ВременнаяТаблица', 'ВашаТаблица';
/* Закончите транзакцию */
COMMIT TRANSACTION;
Этот метод не предполагает использования курсоров и обеспечивает более эффективную производительность, что особенно важно для больших таблиц. Не забудьте следить за логической корректностью данных, предоставляемых с помощью ROW_NUMBER()
.
Визуализация
Добавление столбца с автоинкрементом можно сравнить со строительством небоскреба: так же, как на незастроенном месте появляется небоскреб, в таблице каждому "жителю" присваивается уникальный идентификатор.
Таблица До: 🏙️🆓🏙️ (Пустырь)
Таблица После: 🏙️🏢🏙️ (Небоскреб с идентификаторами 1, 2, 3...)
Чтобы присвоить каждому "жителю" свой уникальный "этаж", используйте следующую команду:
/* Модернизируем структуру */
ALTER TABLE ВашаТаблица ADD IdСтолбец INT IDENTITY(1,1);
Таким образом, мы получаем уникальные идентификаторы для каждой записи, что исключает возможность конфликтов при их присвоении.
Подумайте над следующим, прежде чем добавить столбец автоинкремента
Перед тем как добавлять в таблицу столбец с автоинкрементом, следует обдумать потенциальные риски. Особое внимание необходимо уделить следующим аспектам:
- Реплицируемым таблицам: автоинкрементные идентификаторы могут вызвать конфликты при репликации;
- Распределённым базам данных: в таких системах обеспечение уникальности представляет изрядный вызов;
- ETL-процессам: неожиданные изменения в структуре могут привести к сбоям в работе.
Полезные материалы
- ALTER TABLE (Transact-SQL) – SQL Server | Microsoft Learn — обширный ресурс, посвященный SQL Server от Microsoft.
- SQL Server add auto increment primary key to existing table – Stack Overflow — обсуждение специалистов на площадке Stack Overflow.
- @@IDENTITY (Transact-SQL) – SQL Server | Microsoft Learn — подробная информация о работе SQL Server непосредственно от Microsoft.
- Identity Columns – Simple Talk — детальное изучение столбцов с автоинкрементом.
- SQL Server add auto-incremental identity column to table after creating table — авторитетные советы и рекомендации по работе с SQL Server.