Как добавить столбец в таблицу на SQL Server, которая не допускает null?

У меня есть таблица, в которой я хочу добавить столбец бит, который я хочу по умолчанию для false для всех существующих данных.

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

Должен ли я создать его как обнуляемый, сделать вставку, чем переключить ее не-nullable?

Ответы

Ответ 1

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

ALTER TABLE foo 
ADD bar bit 
DEFAULT 0 NOT NULL;

Ответ 2

ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES;

Предложение "со значениями" направляет значение по умолчанию в существующие строки.

Ответ 3

ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0

Для чего вы можете запустить диспетчер Enterprise, внести изменения в пользовательский интерфейс, а затем сгенерировать смену Script, и вы можете увидеть, как он выполнит эти задачи.

Ответ 4

В качестве альтернативы перечисленным ответам имеется еще один синтаксис, который может подойти некоторым людям лучше, например, если вы используете такие инструменты, как "ReadyRoll".

ALTER TABLE [dbo].[FOO] ADD BAR bit NOT NULL CONSTRAINT [df_Bar] DEFAULT 0

Отметьте этот ответ SO, чтобы понять, почему имена ваших ограничений (df_Bar выше) хороши.

Ответ 5

Я также сделал это, как вы говорите, "создайте его как обнуляемый, внесите в него вставку, а затем замените его на недействительный". У меня не было проблем с этим.

Мне еще не нужно было найти лучший способ, но я заинтригован, если есть другой способ...

Ответ 6

Я обычно создаю поле как nullable с по умолчанию как false в вашем случае обновлять все поля, которые были в базе данных, затем переключать его на null