Как установить значение по умолчанию для существующего столбца
Это не работает в SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Ошибка:
Неверный синтаксис рядом с ключевым словом "SET".
Что я делаю неправильно?
14 ответов
Это будет работать в SQL Server:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
Для этого нельзя использовать alter column, используйте вместо этого add
ALTER TABLE Employee
ADD DEFAULT('SANDNES') FOR CityBorn
Правильный способ сделать это заключается в следующем:
Запустите команду:
sp_help [table name]
Скопируйте имя
CONSTRAINT
,Брось
DEFAULT CONSTRAINT
:ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
Запустите команду ниже:
ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
Решение Hoodaticus было идеальным, спасибо, но мне также нужно было перезапустить его, и я нашел способ проверить, было ли это сделано...
IF EXISTS(SELECT * FROM information_schema.columns
WHERE table_name='myTable' AND column_name='myColumn'
AND Table_schema='myDBO' AND column_default IS NULL)
BEGIN
ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END
Есть два сценария, где значение по умолчанию для столбца может быть изменено,
- Во время создания таблицы
- Изменить существующий столбец для существующей таблицы.
- Во время создания таблицы / создания нового столбца.
запрос
create table table_name
(
column_name datatype default 'any default value'
);
- Изменить существующий столбец для существующей таблицы
В этом случае мой SQL-сервер не позволяет изменять существующее значение ограничения по умолчанию. Таким образом, чтобы изменить значение по умолчанию, нам нужно удалить существующее сгенерированное системой или созданное пользователем ограничение по умолчанию. И после этого значение по умолчанию может быть установлено для определенного столбца.
Выполните несколько шагов:
- Перечислите все существующие ограничения по умолчанию для столбцов.
Выполните эту процедуру базы данных системы, она принимает имя таблицы в качестве параметра. Возвращает список всех ограничений для всех столбцов в таблице.
execute [dbo].[sp_helpconstraint] 'table_name'
- Удалить существующее ограничение по умолчанию для столбца.
Синтаксис:
alter table 'table_name' drop constraint 'constraint_name'
- Добавьте новое ограничение по умолчанию для этого столбца:
Синтаксис:
alter table 'table_name' add default 'default_value' for 'column_name'
ура @!!!
Ограничения первой капли
DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
WHERE NAME = N'__ColumnName__'
AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)
Второй создать значение по умолчанию
ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
Если ограничение уже существует с именем по умолчанию:
-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);
-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;
Вы можете использовать следующий синтаксис. Для получения дополнительной информации см. Этот вопрос и ответы: Добавьте столбец со значением по умолчанию к существующей таблице в SQL Server.
Синтаксис:
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.
По-другому:
Щелкните правой кнопкой мыши таблицу и выберите "Дизайн", затем щелкните столбец, для которого необходимо установить значение по умолчанию.
Затем в нижней части страницы добавьте значение по умолчанию или привязку: что-то вроде '1' для строки или 1 для int.
ALTER TABLE [dbo].[Employee] ADD DEFAULT ('N') FOR [CityBorn]
Только что нашел 3 простых шага, чтобы изменить уже существующий столбец, который был нулевым раньше
update orders
set BasicHours=0 where BasicHours is null
alter table orders
add default(0) for BasicHours
alter table orders
alter column CleanBasicHours decimal(7,2) not null
ALTER TABLE tblUser
ADD CONSTRAINT DF_User_CreatedON DEFAULT GETDATE() FOR CreatedOn
Попробуйте следующую команду;
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
Например, ответ Юка с проверкой, позволяющей запускать сценарий более одного раза без ошибок. (меньше кода / пользовательских строк, чем при использовании information_schema.columns)
IF object_id('DF_SomeName', 'D') IS NULL BEGIN
Print 'Creating Constraint DF_SomeName'
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END