2008-11-17 2 views
5

У меня есть поле (скажем, foo) в таблице в базе данных SQL Server, которая изначально была определена как NULL, но новые требования указывают, что это поле должен быть непустым.Обновление сценария обновления поля таблицы в SQL Server от NULL до не-NULL

Каков наилучший способ обновления этого поля до ненулевого с помощью скрипта обновления без удаления содержимого таблицы? Я попытался создать сценарий из представления Design, но сбой во время выполнения, потому что текущее содержимое таблицы имеет значения NULL для foo. Хуже того, если я проигнорировал эту ошибку, он продолжает удалять все содержимое таблицы!

ответ

10

Вы должны установить значение для любых строк с NULL в столбце NULL, прежде чем изменять его на NOT NULL.

-- Clean up the data which won't comply with the schema changes 
UPDATE t SET foo = 0 WHERE foo IS NULL 

-- Apply the NOT NULL 
ALTER TABLE t ALTER COLUMN foo int NOT NULL 

-- Add a default for the future if that's what you want 
ALTER TABLE t ADD CONSTRAINT t_foo_def DEFAULT 0 FOR foo 
0

Вы можете установить значение по умолчанию для поля, отличного от нуля. Если вы хотите изменить его с nullable на not-nullable, вы должны указать некоторое значение, которое может быть присвоено строкам с нулевым значением в этом поле.