Ответ 1
Вы можете добавить столбец и указать значение по умолчанию, которое будет использоваться для всех существующих строк.
ALTER TABLE foo
ADD bar bit
DEFAULT 0 NOT NULL;
У меня есть таблица, в которой я хочу добавить столбец бит, который я хочу по умолчанию для false для всех существующих данных.
Как мне изменить таблицу таким образом, чтобы она позволяла мне указывать NOT NULL, прежде чем я вставил false для существующих строк?
Должен ли я создать его как обнуляемый, сделать вставку, чем переключить ее не-nullable?
Вы можете добавить столбец и указать значение по умолчанию, которое будет использоваться для всех существующих строк.
ALTER TABLE foo
ADD bar bit
DEFAULT 0 NOT NULL;
ALTER TABLE foo ADD bar bit DEFAULT 0 NOT NULL WITH VALUES;
Предложение "со значениями" направляет значение по умолчанию в существующие строки.
ALTER TABLE dbo.MyTable ADD MyColumn bit NOT NULL DEFAULT 0
Для чего вы можете запустить диспетчер Enterprise, внести изменения в пользовательский интерфейс, а затем сгенерировать смену Script, и вы можете увидеть, как он выполнит эти задачи.
В качестве альтернативы перечисленным ответам имеется еще один синтаксис, который может подойти некоторым людям лучше, например, если вы используете такие инструменты, как "ReadyRoll".
ALTER TABLE [dbo].[FOO] ADD BAR bit NOT NULL CONSTRAINT [df_Bar] DEFAULT 0
Отметьте этот ответ SO, чтобы понять, почему имена ваших ограничений (df_Bar
выше) хороши.
Я также сделал это, как вы говорите, "создайте его как обнуляемый, внесите в него вставку, а затем замените его на недействительный". У меня не было проблем с этим.
Мне еще не нужно было найти лучший способ, но я заинтригован, если есть другой способ...
Я обычно создаю поле как nullable с по умолчанию как false в вашем случае обновлять все поля, которые были в базе данных, затем переключать его на null