Добавить столбец со значением по умолчанию в существующую таблицу в SQL Server - PullRequest
2519 голосов
/ 18 сентября 2008

Как добавить столбец со значением по умолчанию в существующую таблицу в SQL Server 2000 / SQL Server 2005 ?

Ответы [ 37 ]

3201 голосов
/ 18 сентября 2008

Синтаксис:

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 автоматически сгенерирует
ограничение по умолчанию с забавным именем, например: DF__SomeTa__SomeC__4FB7FEF6

Необязательный оператор с дополнительными значениями:
WITH VALUES требуется только в том случае, если ваш столбец обнуляем.
и вы хотите использовать значение по умолчанию для существующих записей.
Если ваш столбец NOT NULL, он будет автоматически использовать значение по умолчанию
для всех существующих записей, независимо от того, указали ли вы WITH VALUES или нет.

Как вставки работают с ограничением по умолчанию:
Если вы вставите запись в SomeTable и выполните , а не Укажите значение SomeCol, тогда по умолчанию оно будет 0.
Если вы вставите запись и Укажите значение SomeCol как NULL (и ваш столбец допускает пустые значения),
тогда будет использоваться ограничение по умолчанию , а не , и в качестве значения будет вставлено NULL.

Примечания были основаны на замечательных отзывах всех ниже.
Особая благодарность:
@Yatrix, @WalterStabosz, @YahooSerious и @StackMan за их комментарии.

933 голосов
/ 18 сентября 2008
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

Включение DEFAULT заполняет столбец в существующих строках значением по умолчанию, поэтому ограничение NOT NULL не нарушается.

220 голосов
/ 12 апреля 2011

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

ALTER TABLE table
ADD column BIT     -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
128 голосов
/ 18 сентября 2008
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
117 голосов
/ 05 августа 2012
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
94 голосов
/ 24 сентября 2008

Остерегайтесь, когда добавляемый столбец имеет ограничение NOT NULL, но не имеет ограничения DEFAULT (значение). Оператор ALTER TABLE не будет выполнен в этом случае, если в таблице есть какие-либо строки. Решение состоит в том, чтобы либо удалить ограничение NOT NULL из нового столбца, либо предоставить для него ограничение DEFAULT.

92 голосов
/ 25 мая 2012

Самая базовая версия с двумя строками

ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
75 голосов
/ 09 декабря 2010

Использование:

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

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 
69 голосов
/ 14 октября 2014

Если вы хотите добавить несколько столбцов, вы можете сделать это, например:

ALTER TABLE YourTable
    ADD Column1 INT NOT NULL DEFAULT 0,
        Column2 INT NOT NULL DEFAULT 1,
        Column3 VARCHAR(50) DEFAULT 'Hello'
GO
52 голосов
/ 27 декабря 2011

Использование:

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

Ссылка: ALTER TABLE (Transact-SQL) (MSDN)

...