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

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

Ответы [ 37 ]

49 голосов
/ 27 ноября 2011

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

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

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

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

 USE AdventureWorks;
 EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
48 голосов
/ 01 декабря 2011

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

Появилось всплывающее окошко с, как вы уже догадались, правильно отформатированным скриптом с гарантированными изменениями. Нажмите легкую кнопку.

47 голосов
/ 20 июня 2014

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

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

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

Ниже приведен гораздо более подробный сценарий 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

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

47 голосов
/ 01 июня 2012

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

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

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

alter table [schema].[tablename] drop constraint [constraintname]
38 голосов
/ 18 сентября 2008
ALTER TABLE ADD ColumnName {Column_Type} Constraint

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

35 голосов
/ 10 декабря 2015

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

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

enter image description here

30 голосов
/ 05 марта 2014

Пример:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
23 голосов
/ 25 ноября 2014

Пример:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';
21 голосов
/ 20 октября 2016

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

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

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

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

SELECT * 
FROM STUDENT

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

Image 1

18 голосов
/ 15 июня 2015

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

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