Сблъсках се и с този проблем за работата си. И моето решение е покрай #2.
Ето моите стъпки (използвам SQL Server 2005):
1) Добавете колоната към таблицата със стойност по подразбиране:
ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')
2) Добавете NOT NULL
ограничение с NOCHECK
опция. NOCHECK
не се налага върху съществуващи стойности:
ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)
3) Актуализирайте постепенно стойностите в таблицата:
GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
-
Изявлението за актуализиране ще актуализира само максимум 3000 записа. Това позволява да се спестят част от данни по това време. Трябва да използвам „MyColumn IS NULL“, защото моята таблица няма първичен ключ на последователността.
-
GO 1000
ще изпълни предишния оператор 1000 пъти. Това ще актуализира 3 милиона записа, ако имате нужда от повече, просто увеличете този брой. Той ще продължи да се изпълнява, докато SQL Server не върне 0 записа за израза UPDATE.