Как можно добавить столбец со значением по умолчанию в существующую таблицу в SQL Server 2000/SQL Server 2005?
Добавьте столбец со значением по умолчанию в существующую таблицу в SQL Server
Ответ 1
Синтаксис:
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
нужны только тогда, когда ваша колонка имеет значение Nullable
и вы хотите использовать значение по умолчанию для существующих записей.
Если ваш столбец NOT NULL
, он будет автоматически использовать значение по умолчанию
для всех существующих записей, независимо от того, указали ли вы WITH VALUES
или нет.
Как вставки работают с ограничением по умолчанию:
Если вы вставляете запись в SomeTable
и не SomeCol
значение SomeCol
, то по умолчанию оно будет равно 0
.
Если вы вставите значение Record и укажите SomeCol
как NULL
(а в вашем столбце допускаются значения NULL
),
тогда ограничение по умолчанию не будет использоваться, и в качестве значения будет вставлено NULL
.
Примечания были основаны на всех отличных отзывах ниже.
Особая благодарность:
@Yatrix, @WalterStabosz, @YahooSerious и @StackMan за их комментарии.
Ответ 2
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
Включение DEFAULT заполняет столбец в существующих строках со значением по умолчанию, поэтому ограничение NOT NULL не нарушается.
Ответ 3
При добавлении столбца с нулевым значением WITH VALUES
будет гарантировать, что к существующим строкам будет применено определенное значение DEFAULT:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
Ответ 4
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
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
Ответ 6
Остерегайтесь, когда добавляемый столбец имеет ограничение NOT NULL
, но не имеет ограничения DEFAULT
(значение). Оператор ALTER TABLE
не будет работать в этом случае, если в таблице есть строки. Решение состоит в том, чтобы либо удалить ограничение NOT NULL
из нового столбца, либо предоставить ограничение DEFAULT
для него.
Ответ 7
Самая простая версия с двумя строками
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
Ответ 8
Использование:
-- Add a column with a default DateTime
-- to capture when each record is added.
ALTER TABLE myTableName
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())
GO
Ответ 9
Если вы хотите добавить несколько столбцов, вы можете сделать это следующим образом:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
Ответ 10
Использование:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Ссылка: ALTER TABLE (Transact-SQL) (MSDN)
Ответ 11
Вы можете сделать это с 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();''' ;
Ответ 12
Чтобы добавить столбец в существующую таблицу базы данных со значением по умолчанию, мы можем использовать:
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
Это два способа добавить столбец в существующую таблицу базы данных со значением по умолчанию.
Ответ 13
В SQL Server 2008-R2 я перехожу в режим разработки - в тестовую базу данных - и добавляю свои два столбца с помощью конструктора и делаю настройки с помощью графического интерфейса, а затем печально известный Right-Click дает опцию " Создать изменение Script"!
Bang up вытаскивает небольшое окно с, как вы догадались, правильно отформатированное гарантированное смену работы script. Нажмите кнопку "easy".
Ответ 14
В качестве альтернативы вы можете добавить значение по умолчанию, не указывая явно ограничение:
ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname]
Если вы создаете проблему с существующими ограничениями по умолчанию при создании этого ограничения, их можно удалить с помощью:
alter table [schema].[tablename] drop constraint [constraintname]
Ответ 15
Это можно сделать и в графическом интерфейсе SSMS. Я показываю дату по умолчанию ниже, но значение по умолчанию может быть любым, конечно.
- Поместите вашу таблицу в представление дизайна (щелкните правой кнопкой мыши по таблице в объекте explorer-> Дизайн)
- Добавьте столбец в таблицу (или щелкните столбец, который вы хотите обновить, если он уже существует)
- В свойствах столбца ниже введите
(getdate())
илиabc
или0
или любое(getdate())
значение в поле "Значение по умолчанию" или "Связывание", как показано ниже:
Ответ 16
ALTER TABLE ADD ColumnName {Column_Type} Constraint
В статье MSDN ALTER TABLE (Transact-SQL) есть все синтаксис alter table.
Ответ 17
Пример:
ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
Ответ 18
Пример:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
Ответ 19
Сначала создайте таблицу с именем student:
CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)
Добавьте в него один столбец:
ALTER TABLE STUDENT
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)
SELECT *
FROM STUDENT
Создана таблица, и столбец добавляется в существующую таблицу со значением по умолчанию.
Ответ 20
Попробуйте это
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
Ответ 21
SQL Server + Изменить таблицу + Добавить столбец + Значение по умолчанию Уникальный идентификатор
ALTER TABLE Product
ADD ReferenceID uniqueidentifier not null
default (cast(cast(0 as binary) as uniqueidentifier))
Ответ 22
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
Ответ 23
У этого есть много ответов, но я чувствую необходимость добавить этот расширенный метод. Это кажется намного более продолжительным, но очень полезно, если вы добавляете поле 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
Ответ 24
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
Ответ 25
Добавить новый столбец в таблицу:
ALTER TABLE [table]
ADD Column1 Datatype
Например,
ALTER TABLE [test]
ADD ID Int
Если пользователь хочет сделать это автоматически, то:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
Ответ 26
Это можно сделать с помощью приведенного ниже кода.
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
Ответ 27
Это для SQL Server:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
Пример:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
Если вы хотите добавить ограничения, то:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
Ответ 28
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)
Из этого запроса вы можете добавить столбец целочисленного типа данных со значением по умолчанию 0.
Ответ 29
Если значением по умолчанию является Null, то:
- В SQL Server откройте дерево целевой таблицы
- Щелкните правой кнопкой мыши "Столбцы" == >
New Column
- Введите столбец Name,
Select Type
и отметьте флажок Разрешить Nulls - В строке меню нажмите
Save
Готово!
Ответ 30
Хорошо, теперь у меня есть некоторые изменения в моем предыдущем ответе. Я заметил, что ни один из ответов не упоминался 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]