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




добавить столбец в таблицу sql oracle (20)

Синтаксис:

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

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

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

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

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


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

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

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

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


Вы можете сделать это с 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();''' ;

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

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

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

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

Готово!


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

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

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


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

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

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

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

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


Попробуй это

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

Пример:

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

Пример:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';

У этого есть много ответов, но я чувствую необходимость добавить этот расширенный метод. Это выглядит намного дольше, но это очень полезно, если вы добавляете поле 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

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

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

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

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

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

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

    IF @@ROWCOUNT < 1000000
        BREAK;
END

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

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

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


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

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


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

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

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

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

SELECT * 
FROM STUDENT

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


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

ALTER TABLE ADD ColumnName {Column_Type} Constraint

В статье MSDN ALTER TABLE (Transact-SQL) есть все синтаксис alter table.


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

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


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

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





sql-server-2000