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

Это не работает в SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

Ошибка:

Неправильный синтаксис рядом с ключевым словом «SET».

Что я делаю не так?

Ответы [ 13 ]

520 голосов
/ 22 июля 2011

Это будет работать в SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
156 голосов
/ 22 июля 2011
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
46 голосов
/ 22 июля 2011

не может использовать для этого столбец alter, вместо этого используйте add

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
28 голосов
/ 14 февраля 2014

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

  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]
    
10 голосов
/ 03 февраля 2016

Решение 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
6 голосов
/ 24 февраля 2015

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

  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'

ура @ !!!

4 голосов
/ 17 августа 2018

в случае, если ограничение уже существует с именем по умолчанию:

-- 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;
4 голосов
/ 27 января 2014
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3 голосов
/ 13 декабря 2017

Только что нашел 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 
2 голосов
/ 20 марта 2018

Ограничения первого удаления

https://stackoverflow.com/a/49393045/2547164

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...