У меня была похожая проблема, и я пошел с измененным подходом # 3. В моем случае база данных находилась в режиме восстановления SIMPLE, и на таблицу, в которую предполагалось добавить столбец, не было никаких ограничений FK.
Вместо создания новой таблицы с той же схемой и копирования содержимого исходной таблицы я использовал синтаксис SELECT… INTO .
По данным Microsoft (http://technet.microsoft.com/en-us/library/ms188029(v=sql.105).aspx)
Количество журналов для SELECT ... INTO зависит от модели восстановления
действует для базы данных. По простой модели восстановления или
модель восстановления с массовой регистрацией, минимальная регистрация операций с массовыми операциями. С
минимальное ведение журнала, с помощью оператора SELECT… INTO может быть больше
эффективнее, чем создание таблицы, а затем заполнение таблицы
Вставить заявление. Для получения дополнительной информации см. Операции, которые могут быть
Минимально зарегистрировано.
Последовательность шагов:
1.Перемещение данных из старой таблицы в новую при добавлении нового столбца со значением по умолчанию
SELECT table.*, cast (‘default’ as nvarchar(256)) new_column
INTO table_copy
FROM table
2. Удалить старый стол
DROP TABLE table
3. Переименовать вновь созданную таблицу
EXEC sp_rename 'table_copy', ‘table’
4.Создать необходимые ограничения и индексы для новой таблицы
В моем случае в таблице было более 100 миллионов строк, и этот подход завершился быстрее, чем в подходе №2, а рост пространства журнала был минимальным.