Добавить столбец со значением по умолчанию в существующую таблицу в SQL Server


2,178

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

  0

пожалуйста, откройте ссылку, может помочь вам http://www.codefari.com/2015/10/add-column-with-default-value -to.html 18 дек. 152015-12-18 11:37:39

  0

, а также этот http://www.w3schools.com/sql/sql_alter.asp 26 июл. 162016-07-26 23:10:26

2,787
ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE} 
WITH VALUES 
+274

Имейте в виду, что если столбец является нулевым, то значение null будет использоваться для существующих строк. 31 янв. 122012-01-31 15:43:28

+2

@RichardCollette, который является столбцом с нулевым значением. Если мой тип данных является int или varchar, он всегда принимает значение * null * для существующих строк, даже если я укажу значение по умолчанию. Означает ли это, что значение по умолчанию относится только к новым записям? 03 фев. 122012-02-03 15:04:22

+11

@ Thecrocodilehunter Nullable column означает, что вы можете вставить Null для значения столбцов. Если это не столбцы с нулевым значением, вам нужно вставить некоторое значение этого типа данных. Таким образом, для существующих записей Null будет вставлен в них, а в новых записях значение по умолчанию будет вставлено, если не указано иное. Имеют смысл? 29 фев. 122012-02-29 16:42:14

+30

Мне нравится этот ответ немного лучше, чем dbugger, потому что он явно называет ограничение по умолчанию. Ограничение по умолчанию все еще создается с использованием синтаксиса dbugger, за исключением того, что его имя автогенерируется. Знание точного имени удобно при написании сценариев DROP-CREATE. 23 мар. 122012-03-23 12:43:19

  0

Неправильное использование. Если вы укажете значение по умолчанию с использованием ограничения DEFAULT, оно будет использоваться как значение для существующих строк, по крайней мере, в SQL Server 2008. 18 июн. 122012-06-18 11:04:10

+13

@Vertigo. Это ТОЛЬКО true, если столбец 'NOT NULL'.Попробуйте это: 'create table blah (int not null primary key clustered); вставить значения blah (1), (2); alter table blah add b int null constraint df_blah_b default (0); выберите * from blah; 'Вы увидите 2 значения NULL для столбца' b'. 14 июн. 132013-06-14 22:19:54

  0

Измените столбец 'NOT NULL' значением' DEFAULT'. Затем, со вторым запросом, сделайте столбец нулевым. Задача решена. 1-й запрос добавляет ваши значения по умолчанию. 2nd позволяет допускать нули в будущем. 26 мар. 142014-03-26 20:20:11

+31

Используйте 'WITH VALUES' для обновления существующих строк с нулевым значением. См. [MSDN] (http://msdn.microsoft.com/en-us/library/ms187742.aspx): «Если добавленный столбец позволяет указать нулевые значения и указано« WITH VALUES », значение по умолчанию сохраняется в новом столбец, добавленный к существующим строкам. " 28 июл. 142014-07-28 09:45:58

  0

Имейте в виду, что вам нужно будет перекомпилировать любые виды и хранимые процедуры, которые содержат SELECT {TABLENAME}. *, {ДРУГОЙ ТАБЛИЦЫ} .Field1 FROM {TABLENAME} JOIN {ANOTHER TABLE} ON ... 27 окт. 152015-10-27 19:59:34

+1

Вы подвели итоги 4 строки, что нужно [MSDN] (https://msdn.microsoft.com/en-us/library/ms190273.aspx) миллион, чтобы рассказать мне. Благодаря! 19 окт. 162016-10-19 20:30:41


30
ALTER TABLE ADD ColumnName {Column_Type} Constraint 

В статье MSDN ALTER TABLE (Transact-SQL) имеет все альтер синтаксисе таблицы.


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

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

+10

Проблема с этим ответом заключается в том, что значение по умолчанию применимо только для новых записей. Существующие записи по-прежнему будут иметь значение NULL. 09 ноя. 112011-11-09 10:22:08

+111

Вы обнаружите, что это не так. В противном случае ограничение будет нарушено. 09 ноя. 112011-11-09 16:50:24

+28

Столбцы в существующих строках заполняются значением по умолчанию. Это подтвердит небольшой эмпирический тест. 09 ноя. 112011-11-09 16:57:03

+66

Просто уточнить - если в команде не указано «NOT NULL», значение для существующих строк НЕ будет обновляться и останется NULL. Если в команде включено «NOT NULL», значение для существующих строк будет обновлено в соответствии со значением по умолчанию. 14 авг. 122012-08-14 22:11:38

+12

Для нескольких столбцов ** ALTER TABLE table_1 ADD col_1 INT NOT NULL DEFAULT (1), col_2 INT NULL ** 04 сен. 132013-09-04 05:25:11

+2

--to сделать ADD повторно исполняемым (например, если столбец уже существует) ... ЕСЛИ НЕ СУЩЕСТВУЕТ (SELECT * FROM sys.columns WHERE [имя] = N '<InsertFieldName>' И [object_id] = oBJECT_ID (N <InsertTableName> ')) НАЧАТЬ \t ALTER TABLE <InsertTableName> ADD <InsertFieldName> ... END 12 мар. 152015-03-12 00:59:48

+1

Именование вашего ограничения как противостояния разрешению автоматического имени SQL, это сохранит вашу схему более ремонтопригодной. Ниже приведены некоторые примеры CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES 02 мар. 162016-03-02 04:45:00

+3

Имейте в виду, что если вы используете этот метод, у вас будет DEFAULT, прикрепленная к вашей таблице, так что в будущих операциях Insert, которые опускают ваш новый столбец, будет создан по умолчанию вместо отказа. Если ваша цель заключается в том, что вы продвигаетесь вперед, вы ДОЛЖНЫ указать значение, и вы не хотите использовать по умолчанию, убедитесь, что вы сбросили настройки по умолчанию, которые вы создали после того, как вы успешно добавили столбец. 29 ноя. 162016-11-29 20:02:01


108
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 
+5

Это не будет работать, если в таблице уже есть контент, потому что новый столбец «не нулевой» создается до ограничения по умолчанию 16 май. 162016-05-16 14:16:35

+1

. Мой +1 идет для фрагмента после первого «GO», который добавляет ограничение к существующему столбцу. 22 фев. 172017-02-22 00:33:02


77

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

  0

любой *** образец SQL *** об этом? 23 авг. 162016-08-23 11:50:28


60

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

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

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

182

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

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

Это ключевой момент. Легко предположить, что столбец с ограничением 'DEFAULT' всегда будет иметь значение, то есть не будет NULL, даже если' NOT NULL' не указан. 27 ноя. 122012-11-27 19:29:03

+5

@tkocmathla uh, я не говорил о типе 'BIT', я говорил об этом конкретном столбце' BIT' ** **. Посмотрите на ответ, столбец объявлен как «NOT NULL». 20 авг. 142014-08-20 19:57:19


37

Вы можете сделать вещь с Т- SQL следующим образом.

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

Как вы можете использовать SQL Server Management Studio также правой таблицы, щелкнув в меню Design, установив значение по умолчанию для таблицы.

И кроме того, если вы хотите добавить тот же столбец (если он не существует) для всех таблиц в базе данных, а затем использовать:

USE AdventureWorks; 
EXEC sp_msforeachtable 
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ; 

38

В SQL Server 2008 R2, я иду к конструкции mode - в тестовой базе данных - и добавьте мои два столбца, используя конструктор, и сделайте настройки с помощью графического интерфейса пользователя, а затем печально известный . Щелкните правой кнопкой мыши и выберите опцию «Сгенерировать сценарий изменений«!

Bang up вытаскивает небольшое окно, как вы уже догадались, правильно отформатированный скрипт с гарантией на работу. Нажмите на кнопку.


41

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

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

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


72

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

ALTER TABLE MyTable 
ADD MyNewColumn INT NOT NULL DEFAULT 0 

37

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

ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname] 

Если у вас есть проблемы с существующими ограничениями по умолчанию при создании этого ограничения, то они могут быть удалены:

alter table [schema].[tablename] drop constraint [constraintname] 
  0

FYI, явно называя ограничение, используя стандартную схему именования (например, «DF_Table_Column»), для удобства обслуживания. В противном случае определение ограничения требует больше работы. 22 ноя. 172017-11-22 00:15:12


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

Это добавление null! Должно быть не null до 17 сен. 132013-09-17 19:55:53

+2

@baaroz, это работает с NOT NULL: ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR (200) NOT NULL DEFAULT 'SNUGGLES' 22 фев. 152015-02-22 09:59:14


24

Пример:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO 

35

Чтобы добавить столбец в существующую базу данных таблица со значением по умолчанию, мы можем использовать:

ALTER TABLE [dbo.table_name] 
    ADD [Column_Name] BIT NOT NULL 
Default (0) 

Адрес: r для добавления столбца в существующую таблицу базы данных со значением по умолчанию.

Более подробный SQL-скрипт для добавления столбца со значением по умолчанию приведен ниже, включая проверку наличия столбца перед добавлением его, а также проверку ограничения и удаление его, если таковой имеется. Этот скрипт также называет ограничение, поэтому мы можем иметь красивое соглашение об именах (мне нравится DF_), и если SQL не даст нам ограничения с именем, которое имеет случайно сгенерированное число; поэтому неплохо также назвать ограничение.

------------------------------------------------------------------------- 
-- Drop COLUMN 
-- Name of Column: Column_EmployeeName 
-- Name of Table: table_Emplyee 
-------------------------------------------------------------------------- 
IF EXISTS (
      SELECT 1 
      FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = 'table_Emplyee' 
       AND COLUMN_NAME = 'Column_EmployeeName' 
      ) 
    BEGIN 

     IF EXISTS (SELECT 1 
        FROM sys.default_constraints 
        WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]') 
         AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]') 
       ) 
      BEGIN 
       ------ DROP Contraint 

       ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName] 
      PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped' 
      END 
    -- ----- DROP Column ----------------------------------------------------------------- 
     ALTER TABLE [dbo].table_Emplyee 
      DROP COLUMN Column_EmployeeName 
     PRINT 'Column Column_EmployeeName in images table was dropped' 
    END 

-------------------------------------------------------------------------- 
-- ADD COLUMN Column_EmployeeName IN table_Emplyee table 
-------------------------------------------------------------------------- 
IF NOT EXISTS (
       SELECT 1 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = 'table_Emplyee' 
        AND COLUMN_NAME = 'Column_EmployeeName' 
       ) 
    BEGIN 
    ----- ADD Column & Contraint 
     ALTER TABLE dbo.table_Emplyee 
      ADD Column_EmployeeName BIT NOT NULL 
      CONSTRAINT [DF_table_Emplyee_Column_EmployeeName] DEFAULT (0) 
     PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added' 
     PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added' 
    END 

GO 

Это два способа добавить столбец в существующую таблицу базы данных со значением по умолчанию.


12

Попробуйте

ALTER TABLE Product 
ADD ProductID INT NOT NULL DEFAULT(1) 
GO 

51

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

ALTER TABLE YourTable 
    ADD Column1 INT NOT NULL DEFAULT 0, 
     Column2 INT NOT NULL DEFAULT 1, 
     Column3 VARCHAR(50) DEFAULT 'Hello' 
GO 

19

Пример:

ALTER TABLE tes 
ADD ssd NUMBER DEFAULT '0'; 

14

SQL Server + Alter Table + Добавить столбец + Значение по умолчанию Уникальный идентификатор

ALTER TABLE Product 
ADD ReferenceID uniqueidentifier not null 
default (cast(cast(0 as binary) as uniqueidentifier)) 

4

SQL Server + Alter Table + Добавить столбец + Значение по умолчанию UniqueIdentifier ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO 

15

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

  1. Положите вашу таблицу в режиме конструктора (Щелкните правой кнопкой мыши на таблице в объекте Эксплорер> Дизайн)
  2. Добавить столбец в таблицу (или нажмите на колонке вы хотите обновить, если уже существует)
  3. в Column Properties ниже, введите (getdate()) или abc или 0 или что-то значение, которое вы хотите в значение по умолчанию или Binding поле как показано на рисунке ниже:

enter image description here


8

Добавить новый столбец в таблице:

ALTER TABLE [table] 
ADD Column1 Datatype 

Например,

ALTER TABLE [test] 
ADD ID Int 

Если пользователь хочет, чтобы он автоматически увеличивается, то:

ALTER TABLE [test] 
ADD ID Int IDENTITY(1,1) NOT NULL 

11
IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME' 
) 
BEGIN 
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default 
END 
+2

Мне нравится проверка NOT NOT EXISTS перед попыткой изменить Таблица. Очень хорошее решение. Некоторые дополнительные комментарии о том, как это работает, сделают его еще более полезным. 21 июн. 162016-06-21 20:14:15


4

Если по умолчанию Null, то:

  1. В SQL Server, откройте дерево целевой таблицы
  2. правой кнопкой мыши "Столбцы" ==>New Column
  3. Тип столбца Имя, Select Type, и установите флажок Разрешить NULLS Checkbox
  4. в строке меню выберите Save

Готово!


5
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0) 

Из этого запроса можно добавить столбец типа данных целого числа со значением по умолчанию 0.


6

Это может быть сделано с помощью кода ниже.

CREATE TABLE TestTable 
    (FirstCol INT NOT NULL) 
    GO 
    ------------------------------ 
    -- Option 1 
    ------------------------------ 
    -- Adding New Column 
    ALTER TABLE TestTable 
    ADD SecondCol INT 
    GO 
    -- Updating it with Default 
    UPDATE TestTable 
    SET SecondCol = 0 
    GO 
    -- Alter 
    ALTER TABLE TestTable 
    ALTER COLUMN SecondCol INT NOT NULL 
    GO 

12

Сначала нужно создать таблицу с учеником имени:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL) 

Добавить один столбец к нему:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0) 

SELECT * 
FROM STUDENT 

Таблица создается и столбец добавляется в существующая таблица со значением по умолчанию.

Image 1


5

Ну, теперь у меня есть некоторые изменения в мой предыдущий ответ. Я заметил, что ни один из ответов не упоминается IF NOT EXISTS. Поэтому я собираюсь предоставить новое решение, так как столкнулся с некоторыми проблемами, изменяющими таблицу.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient') 
BEGIN 
ALTER TABLE dbo.TaskSheet ADD 
IsBilledToClient bit NOT NULL DEFAULT ((1)) 
END 
GO 

Здесь TaskSheet это конкретное имя таблицы и IsBilledToClient является новый столбец, который вы собираетесь вставить и 1 значение по умолчанию. Это означает, что в новом столбце будет значение существующих строк, поэтому там будет установлено автоматически. Тем не менее, вы можете изменить, как хотите, с учетом типа столбца, как я использовал BIT, поэтому я поместил значение по умолчанию 1.

Я предлагаю вышеупомянутую систему, потому что я столкнулся с проблемой. Так в чем проблема? Проблема состоит в том, что если столбец IsBilledToClient существует в таблице таблицы, тогда, если вы выполняете только часть кода, приведенного ниже, вы увидите ошибку в построителе запросов SQL-сервера. Но если он не существует, то в первый раз при выполнении ошибки не будет.

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

4

Вы можете использовать этот запрос:

ALTER TABLE tableName ADD ColumnName datatype DEFAULT DefaultValue; 

6

Это имеет много ответов, но я чувствую необходимость добавить этот расширенный метод. Это выглядит намного дольше, но это очень полезно, если вы добавляете поле NOT NULL в таблицу с миллионами строк в активной базе данных.

ALTER TABLE {schemaName}.{tableName} 
    ADD {columnName} {datatype} NULL 
    CONSTRAINT {constraintName} DEFAULT {DefaultValue} 

UPDATE {schemaName}.{tableName} 
    SET {columnName} = {DefaultValue} 
    WHERE {columName} IS NULL 

ALTER TABLE {schemaName}.{tableName} 
    ALTER COLUMN {columnName} {datatype} NOT NULL 

Что это будет сделать, это добавить столбец как обнуляемое поле и со значением по умолчанию, обновить все поля в значение по умолчанию (или вы можете назначить более значимые ценности), и, наконец, это изменит столбец НЕ НЕТ.

Причина этого заключается в том, что вы обновляете таблицу большого масштаба и добавляете новое не пустое поле, которое оно должно писать в каждую строку, и таким образом блокирует всю таблицу, когда она добавляет столбец, а затем записывает все значения ,

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

Я обнаружил, что выполнение всего дела в одном заявлении заблокирует одну из наших более активных таблиц в течение 4-8 минут, и довольно часто я убил процесс. Этот метод для каждой части обычно занимает всего несколько секунд и вызывает минимальную блокировку.

Кроме того, если у вас есть таблица в области миллиардов строк может быть стоит дозированием обновление следующим образом:

WHILE 1=1 
BEGIN 
    UPDATE TOP (1000000) {schemaName}.{tableName} 
     SET {columnName} = {DefaultValue} 
     WHERE {columName} IS NULL 

    IF @@ROWCOUNT < 1000000 
     BREAK; 
END 

4

правой кнопкой мыши на таблице, щелкните под последним именем столбца и введите информация о столбце.

Затем добавьте значение по умолчанию или привязку, что-то вроде «1» для строки или 1 для int.


2

этап-1.Сначала вы должны изменить стол с добавить поле

alter table table_name add field field_name data_type 

шаг 2 CREATE DEFAULT

USE data_base_name; 
GO 
CREATE DEFAULT default_name AS 'default_value'; 

шаг 3, то вы должны EXECUTE Эта процедура

exec sp_bindefault 'default_name' , 'schema_name.table_name.field_name' 

пример -

USE master; 
GO 
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate'; 

0
This is for Sql Server 

ALTER TABLE TableName 
     ADD ColumnName (type) ->NULL OR NOT NULL 
    DEFAULT (default value) 
     WITH VALUES 
Example 

ALTER TABLE Activities 
     ADD status int NOT NULL DEFAULT (0) 
     WITH VALUES 
if want to add constraints then -> 

ALTER TABLE Table_1 
     ADD row3 int NOT NULL 
CONSTRAINT CONSTRAINT_NAME DEFAULT (0) 
     WITH VALUES 

1

Добавить столбец С Значение по умолчанию

enter image description here


0
ALTER TABLE Table1 ADD Col3 INT NOT NULL DEFAULT(0)