#sql-server #azure-sql-server
#sql-сервер #azure-sql-сервер
Вопрос:
У меня есть таблица с миллионом записей, и требуется добавить новое поле int ‘Id’ в качестве первичного ключа с автоматическим добавлением. Теперь мне удается работать с таблицами с разумно небольшим объемом данных, но некоторые таблицы содержат миллионы записей и выдают ошибку тайм-аута. База данных — это Azure SQL
'MyTable(dbo)' table
- Unable to modify table.
Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the
server is not responding.
The statement has been terminated.
Комментарии:
1. Как вы выполняете эти команды?
2. Честно говоря, вам может быть лучше создать новую таблицу, вставить существующие данные в новую, а затем
DROP
отредактировать старую таблицу и переименовать новую. Однако требование добавленияIDENTITY
столбца в таблицу с миллионами строк уже имеет для меня некоторый «запах» проблемы XY .3. @David, я перехожу в редактор конструктора, щелкнув правой кнопкой мыши по таблице в SQL Management Studio, затем добавляю новый идентификатор столбца и в разделе свойства —> Спецификация идентификатора —> установить для приращения идентификатора значение Yes
4. @Larnu, внешнего ключа нет. Я работаю над кодом и знаю, что нужно вернуться, но мне нужно быстрое грязное решение.. Это постановка, так что я не возражаю взять Рика сюда
5. Вот почему я рекомендовал вам создать новую версию таблицы,
INSERT
добавить в нее существующие данные, а затемDROP
старую таблицу и переименовать новую, @Toxic . Затем вы также можете использовать aBULK INSERT
, если вам это действительно нужно.
Ответ №1:
Я создаю пример кода, на который, возможно, вы сможете сослаться:
CREATE TABLE dbo.doc_exz (column_a INT not null, column_b INT) ;
GO
INSERT INTO dbo.doc_exz VALUES (7,7) ;
INSERT INTO dbo.doc_exz VALUES (7,7) ;
INSERT INTO dbo.doc_exz VALUES (7,7) ;
INSERT INTO dbo.doc_exz VALUES (7,7) ;
GO
ALTER TABLE dbo.doc_exz ADD id int IDENTITY(1,1) not null
GO
ALTER TABLE doc_exz ADD PRIMARY KEY (id)
GO
SELECT * FROM dbo.doc_exz ;
GO
DROP TABLE dbo.doc_exz ;
GO
Выходные данные запроса:
Если вы все еще получаете ошибку тайм-аута. Вы могли бы последовать предложению @Larnu:
- Создайте новую версию таблицы
- ВСТАВЬТЕ в нее существующие данные
- затем УДАЛИТЕ старую таблицу и переименуйте новую.
Вы можете использовать МАССОВУЮ ВСТАВКУ для данных большого объема.