#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
Здравствуйте, у меня в таблице есть столбец типа bit, и я буду запускать скрипт для многих баз данных, который проверяет, существует ли он, если он существует, мне нужно изменить is и добавить столбец и по умолчанию установить его битовое значение равным 1 по умолчанию
Я попробовал следующее, но когда он создал столбец, он по-прежнему показывает NULL, чего мне не хватает?
ALTER TABLE [myTable] ADD [ShippingOption] [bit] NULL DEFAULT 1
Спасибо
Ответ №1:
Просто используйте WITH VALUES
, чтобы новый столбец принимал default
значение, а не NULL
ALTER TABLE [myTable]
ADD [ShippingOption] [bit] NULL DEFAULT 1 WITH VALUES;
Это не требуется, если ваш недавно добавленный столбец помечен как NOT NULL
. В этом случае значение по умолчанию будет применено автоматически.
Ответ №2:
Когда ограничение по умолчанию применяется к столбцу с нулевым значением, например, в этом случае, значение по умолчанию применяется только к вставкам, когда имя столбца исключено из списка.
Обычно это не применяется при создании поля. Редактировать: Однако, как указал Мартин, можно получить желаемый эффект путем добавления WITH VALUES
.
Комментарии:
1. Это возможно. Смотрите мой ответ.
2. Вы правы, это проскользнуло мимо меня. Спасибо, что указали на это!
Ответ №3:
Похоже, вы создали столбец со значением по умолчанию. Все будущие вставки будут использовать это значение по умолчанию, если оно не указано.
Вы говорите «он все еще показывает NULL
«. Вам нужно будет обновить существующие записи:
UPDATE myTable
SET ShippingOption = 1
WHERE ShippingOption IS NULL;
Причина, по которой ваше значение по умолчанию не применяется: ваш столбец по-прежнему обнуляется. Поэтому при создании не требовалось применять значение по умолчанию.
В качестве альтернативы вы можете указать, что столбец должен быть NOT NULL
в вашем ALTER
заявлении. Это гарантировало бы, что ваше значение по умолчанию будет применено, не требуя от вас выдачи UPDATE
, а также гарантируя, что любой оператор потребует ненулевого значения при вставке:
ALTER TABLE [MyTable] ADD [ShippingOption] [bit] NOT NULL DEFAULT 1;