Питання Додайте стовпець зі значенням за промовчанням до існуючої таблиці в SQL Server


Як стовпець зі значенням за умовчанням може бути доданий до існуючої таблиці в SQL Server 2000 / SQL Server 2005?


2297
2017-09-18 12:30


походження


і це також w3schools.com/sql/sql_alter.asp - Academy of Programmer


Відповіді:


Синтаксис:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Приклад:

ALTER TABLE SomeTable
        ADD SomeCol Bit NULL --Or NOT NULL.
 CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is autogenerated.
    DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.

Примітки:

Необов'язкове ім'я обмеження:
Якщо ви вийдете звідси CONSTRAINT D_SomeTable_SomeCol то SQL Server буде автоматично генерувати
за замовчуванням Contraint з смішним ім'ям, як: DF__SomeTa__SomeC__4FB7FEF6

Необов'язковий З-Значення Заява:
The WITH VALUES потрібен лише тоді, коли ваша стовпець нульована
і ви хочете, щоб значення за замовчуванням використовувалось для існуючих записів.
Якщо є ваша колонка NOT NULL, то він автоматично використовуватиме значення за умовчанням
для всіх існуючих записів, будь то ви вкажете WITH VALUES чи ні.

Як вставки працюють за умовчанням:
Якщо ви вставите запис в SomeTable і зроби ні Вкажіть SomeCol's значення, то він буде за замовчуванням на 0.
Якщо ви вставите запис і Вкажіть SomeColзначення як NULL (і ваш стовпець дає нуль)
то за замовчуванням обмеження буде ні бути використані і NULL буде вставлено як значення.

Примітки були засновані на чудових відгуків всіх людей нижче.
Особлива подяка:
@Yatrix, @WalterStabosz, @YahooSerious, і @StackMan для їх коментарів.


2920
2017-09-18 12:34



Майте на увазі, що якщо стовпчик є нульовим, тоді значення null буде значення, яке використовується для існуючих рядків. - Richard Collette
@Thecrocodilehunter Nullable column означає, що ви можете вставити значення Null для значення стовпців. Якщо це не є нульовим стовпцем, вам слід вставити якесь значення цього типу даних. Отже, для існуючих записів в них і в нових записах буде вставлено нуль, значення вашого за замовчуванням буде вставлено, якщо не вказано інше. Мати сенс? - Yatrix
Мені подобається ця відповідь трохи краще, ніж dbugger's, тому що він явно називає обмеження за умовчанням. Зниження за умовчанням все ще створюється за допомогою синтаксису dbugger, за винятком, що його назва автоматично генерується. Знання точної назви зручно при написанні сценаріїв DROP-CREATE. - Walter Stabosz
@ Vertigo Це ТІЛЬКИ вірно, якщо є стовпчик NOT NULL. Спробуйте це: create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah; Ви побачите 2 значення NULL для стовпця b. - ErikE
Використовуйте WITH VALUES оновити існуючі нульові рядки. Побачити MSDN: "Якщо доданий стовпець дає нульові значення і WITH VALUES вказано, значення за замовчуванням зберігається у новому стовпці, доданому до існуючих рядків. " - Yahoo Serious


ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Включення DEFAULT заповнює колонку в існуючий рядки з значенням за замовчуванням, тому обмеження NOT NULL не порушується.


869
2017-09-18 12:31



Проблема з відповіддю полягає в тому, що значення за замовчуванням дійсне лише для нових записів. Існуючі записи будуть мати значення NULL. - Roee Gavirel
Ви побачите, що це не так. В іншому випадку обмеження буде порушено. - dbugger
Колонки в існуючих рядках заповнюються за замовчуванням. Це підтвердить невеликий емпіричний тест. - dbugger
Просто для уточнення - якщо команда "NOT NULL" опущена, значення для існуючих рядків НЕ буде оновлюватися і залишиться NULL. Якщо в команду входить «НЕ НАЛЬОВА», значення для існуючих рядків буде оновлено, щоб відповідати стандартному. - Stack Man
Для декількох стовпців ALTER TABLE table_1 ADD col_1 int NON NULL DEFAULT (1), col_2 int NULL - aads


При додаванні нульова колонка, WITH VALUES буде забезпечувати, щоб певне значення DEFAULT було застосовано до існуючих рядків:

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES

196
2018-04-12 17:40



Це ключовий момент. Легко припустити стовпчик з DEFAULT обмеження завжди матиме значення, тобто не буде NULL, навіть якщо NOT NULL не вказано - Bill Brinkley
@ tkocmathla uh, я не говорив про BIT Тип даних, я говорив про це конкретно BIT  колонка. Подивіться на відповідь, стовпець оголошується як NOT NULL. - rsenna


ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO

115
2017-09-18 12:39



Це не спрацює, якщо таблиця вже має вміст, тому що новий стовпець "not nullable" буде створено до обмеження значення за умовчанням - WDuffy
Мій номер +1 потрапляє на фрагмент після першого GO який додає обмеження до існуючого стовпця. - Barry Guvenkaya


ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'

104
2017-08-05 03:28



це додати null! має бути не нульовим раніше - baaroz
@baoroz, це працює з NOT NULL: ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR (200) NOT NULL DEFAULT 'SNUGGLES' - stom


Остерігайтеся, коли додається стовпчик NOT NULL обмеження, але не має DEFAULT обмеження (значення). The ALTER TABLE Заява буде невдалою у тому випадку, якщо в таблиці є якісь рядки в ньому. Рішення - або видалити NOT NULL обмеження з нового стовпця або надайте a DEFAULT обмеження для цього.


84
2017-09-24 16:03



будь-який Зразок SQL про це ? - Kiquenet


Найпростіша версія з двома рядками

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0

78
2018-05-25 14:50





Використання:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 

64
2017-12-09 17:45