Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да добавите колона NOT NULL към голяма таблица в SQL Server?

Сблъсках се и с този проблем за работата си. И моето решение е покрай #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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Връщане на привилегии на колона от свързан сървър в SQL Server (T-SQL примери)

  2. Внедряване на инкрементално натоварване с помощта на заснемане на промяна на данни в SQL Server

  3. Кога трябва да използвам начални/крайни блокове и ключовата дума Go в SQL Server?

  4. Как мога да използвам единичен пул за връзки mssql през няколко маршрута в уеб приложение Express 4?

  5. Има ли начин да се извлече дефиницията на изглед от SQL Server с помощта на обикновен ADO?