решение:
Это будет работать для таблиц, в которых нет изменений в таблице изменений, которые могли бы вызвать каскадные события. Сначала убедитесь, что вы можете отбросить таблицу, которую вы хотите реструктурировать, без каких-либо катастрофических последствий. Запишите все зависимости и ограничения столбцов, связанные с вашей таблицей (т. Е. Триггеры, индексы и т. Д.) .). Возможно, вам придется положить их обратно, когда вы закончите.
ШАГ 1: создайте временную таблицу для хранения всех записей из таблицы, которую вы хотите реструктурировать. Не забудьте включить новый столбец .
CREATE TABLE #tmp_myTable
( [new_column] [int] NOT NULL, <-- new column has been inserted here!
[idx] [bigint] NOT NULL,
[name] [nvarchar](30) NOT NULL,
[active] [bit] NOT NULL
)
ШАГ 2: Убедитесь, что все записи скопированы и структура столбцов выглядит так, как вы хотите.
SELECT TOP 10 * FROM #tmp_myTable ORDER BY 1 DESC
- вы можете сделать COUNT (*) или что-нибудь еще, чтобы убедиться, что вы скопировали все записи
ШАГ 3: УБРАТЬ оригинальную таблицу:
DROP TABLE myTable
Если вы недовольны тем, что могут произойти плохие вещи, просто переименуйте исходную таблицу (вместо того, чтобы бросать ее). Таким образом, его всегда можно вернуть обратно.
EXEC sp_rename myTable, myTable_Copy
ШАГ 4: Создайте таблицу myTable так, как вам нужно (должно совпадать с # tmp_myTable структурой таблицы)
CREATE TABLE myTable
( [new_column] [int] NOT NULL,
[idx] [bigint] NOT NULL,
[name] [nvarchar](30) NOT NULL,
[active] [bit] NOT NULL
)
- не забывайте, какие ограничения вам могут понадобиться
ШАГ 5: Скопируйте все записи из таблицы temp # tmp_myTable в новую (улучшенную) таблицу myTable .
INSERT INTO myTable ([new_column],[idx],[name],[active])
SELECT [new_column],[idx],[name],[active]
FROM #tmp_myTable
ШАГ 6. Проверьте, вернулись ли все данные в новую улучшенную таблицу myTable . Если да, очистите после себя и УДАЛИТЕ временную таблицу # tmp_myTable и таблицу myTable_Copy , если вы решили переименовать ее вместо ее удаления.