Требуется ли NULL или NOT NULL для добавления столбца в SQL Server? (Если вы собираетесь запустить инструкцию UPDATE после)
Я тестировал без него локально, и он отлично работает как в SQL, так и на веб-сайте; но я хотел убедиться перед запуском выпуска/производства.
Я просмотрел некоторые другие статьи, включая веб-сайт Microsoft. Некоторые показывают это с, некоторые без. В статьях SO говорится о некоторых преимуществах NULL, например, если у вас есть информация, которая может быть добавлена позже. Но если я собираюсь запустить UPDATE для добавления значений после этого, будет ли это иметь значение?
Я предполагаю, что это не имеет значения из того, что я тестировал и читал.
ALTER TABLE [dbo].[MyTable] ADD NewColumn varchar(150);
UPDATE [dbo].[MyTable] SET NewColumn ='Math' WHERE ID = 1
UPDATE [dbo].[MyTable] SET NewColumn ='Science' WHERE ID = 2
Чтобы уточнить, в таблице уже есть строки с данными, я просто добавляю новый столбец, а затем добавляю данные в столбец новый в каждой строке. Я не знал, но, возможно, диаграмма до/после могла быть полезной с моей стороны.
Ах, точно, моя ошибка!
Вам не нужно его записывать, если вы его пропустите, столбец будет создан как «NULL».
Следующие операторы равны:
ALTER TABLE [dbo].[MyTable] ADD NewColumn varchar(150);
ALTER TABLE [dbo].[MyTable] ADD NewColumn varchar(150) NULL;
Если вы хотите добавить столбец, и механизм БД должен гарантировать, что этот новый столбец всегда будет заполнен, вы можете добавить столбец NOT NULL со значением по умолчанию. Другим вариантом будет изменение столбца на NOT NULL после обновления.
Я бы удостоверился, что у вас есть что-то декларативное. И если вы устанавливаете значение «не нуль», убедитесь, что у вас есть значение по умолчанию, иначе использование может привести к БОЛЬШИМ потерям данных, если данные ранее существовали. Это заставляет меня нервничать, потому что это ALTER против CREATE.
Вы можете пропустить его, и по умолчанию столбец будет создан как NULL. Однако это более разборчиво, если вы укажете это явно.
Имейте в виду, что если в вашей таблице уже есть данные, вы НЕ МОЖЕТЕ добавить столбец как NOT NULL. Для этого вы должны сначала добавить столбец как NULL, затем ОБНОВИТЬ значения с ненулевыми действительными данными, а затем изменить столбец на NOT NULL.
Обновлено: предполагается поведение сервера sql по умолчанию при добавлении столбцов.
Не думайте — этим управляет параметр ANSI_NULL_DFLT_ON.
Вы можете добавить столбец как NOT NULL, если одновременно установите значение DEFAULT (но это значение по умолчанию будет применяться к каждой строке и, в зависимости от версии SQL Server, будет блокирующей операцией по размеру данных).
@SMor Вы правы. Мой ответ относится только к поведению сервера sql по умолчанию.
Вопрос не в том, когда вы вставляете или обновляете данные, а в том, является ли логически правильным, чтобы объект, который вы моделируете в таблице, имел значение
NULL
в одном из своих атрибутов, смоделированных как столбец. Если и только если это не так, столбец должен бытьNOT NULL
. Но поскольку вы не сказали, что пытаетесь смоделировать, боюсь, вы не получите много полезных ответов на этот вопрос.