Могу ли я добавить столбец not null без значения по умолчанию



могу ли я добавить столбец, который я указываю как NOT NULL,я не хочу указывать значение по умолчанию, но MS-SQL 2005 говорит:




ALTER TABLE позволяет добавлять только столбцы, которые могут содержать значения null или иметь определение по умолчанию, или добавляемый столбец является столбцом идентификатора или метки времени, или, альтернативно, если ни одно из предыдущих условий не выполняется, таблица должна быть пустой, чтобы разрешить добавление этого столбца. Столбец 'test' не может быть добавлен в непустую таблицу "шиплист", потому что он не удовлетворяет этим условиям.




Если да, пожалуйста, дайте мне знать синтаксис, если нет пожалуйста, укажите причину.

579   8  

8 ответов:

добавьте столбец в таблицу, обновите существующие строки, чтобы ни одна из них не была нулевой, а затем добавьте ограничение "not null".

нет-SQL Server вполне обоснованно отвергает это, потому что он не будет знать, какое значение должны иметь существующие строки

Это легко создать по умолчанию в то же время, а затем сразу же отбросить его.

нет, вы не можете. Но вы можете рассмотреть возможность указать значение по умолчанию (")

Я использую этот подход, чтобы вставить не нулевой столбец без значения по умолчанию

ALTER TABLE [Table] ADD [Column] INT NULL
GO
UPDATE [Table] SET [Column] = <default_value>
ALTER TABLE [Table] ALTER COLUMN [Column] INT NOT NULL

нет.

просто используйте пустую строку '' (в случае символьного типа) или 0 (если цифровой) и т. д. Как значение по умолчанию

нет, вы не можете, так как SQL Server или любые другие ядра СУБД заставят этот новый столбец быть null для существующих строк в вашей таблице данных. Но поскольку вы не разрешаете NULL, вы должны предоставить значение по умолчанию, чтобы уважать свое собственное ограничение. Это подпадает под большой смысл! DBE не будет экстраполировать значение для ненулевых значений для существующих строк.

@ комментарий Damien_The_Unbeliever , Это добавление вычисляемого столбца? Ни вопрос, ни ответ не подразумевали ничего подобного. В случае вычисляемого столбца ошибка гласит:

"для вычисляемых столбцов могут быть созданы только ограничения UNIQUE или PRIMARY KEY, а ограничения CHECK, FOREIGN KEY и NOT NULL требуют сохранения вычисляемых столбцов"

хорошо, если продолжить эту игру в угадайку, вот мой скрипт, иллюстрирующий добавление столбца" NOT NULL "в один шаг "ALTER TABLE":

CREATE TABLE TestInsertComputedColumn 
(
    FirstName VARCHAR(100),
    LastName CHAR(50)
);  

insert into TestInsertComputedColumn(FirstName,LastName)
     select 'v', 'gv8';
select * from TestInsertComputedColumn;

ALTER TABLE TestInsertComputedColumn 
      ADD FullName As FirstName + LastName PERSISTED NOT NULL;

select * from TestInsertComputedColumn;
--drop TABLE TestInsertComputedColumn;

Comments

    Ничего не найдено.