Как установить значение по умолчанию для существующего столбца

Это не работает в 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 TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

Для этого нельзя использовать alter column, используйте вместо этого add

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn

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

  1. Запустите команду:

    sp_help [table name] 
    
  2. Скопируйте имя CONSTRAINT,

  3. Брось DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  4. Запустите команду ниже:

    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

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

  1. Во время создания таблицы
  2. Изменить существующий столбец для существующей таблицы.

  1. Во время создания таблицы / создания нового столбца.

запрос

create table table_name
(
    column_name datatype default 'any default value'
);
  1. Изменить существующий столбец для существующей таблицы

В этом случае мой SQL-сервер не позволяет изменять существующее значение ограничения по умолчанию. Таким образом, чтобы изменить значение по умолчанию, нам нужно удалить существующее сгенерированное системой или созданное пользователем ограничение по умолчанию. И после этого значение по умолчанию может быть установлено для определенного столбца.

Выполните несколько шагов:

  1. Перечислите все существующие ограничения по умолчанию для столбцов.

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

execute [dbo].[sp_helpconstraint] 'table_name'
  1. Удалить существующее ограничение по умолчанию для столбца.

Синтаксис:

alter table 'table_name' drop constraint 'constraint_name'
  1. Добавьте новое ограничение по умолчанию для этого столбца:

Синтаксис:

alter table 'table_name' add default 'default_value' for 'column_name'

ура @!!!

Ограничения первой капли

/questions/39690001/kak-vyi-udalyaete-znachenie-po-umolchaniyu-iz-stolbtsa-v-tablitse/39690025#39690025

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
Другие вопросы по тегам