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

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

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

Ошибка:

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

Что я делаю неправильно?

+332
22 июл. '11 в 14:42
источник поделиться
15 ответов

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

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
+518
22 июл. '11 в 14:48
источник

Связанные вопросы


Похожие вопросы

ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
+156
22 июл. '11 в 14:46
источник

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

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
+46
22 июл. '11 в 14:44
источник

Правильный способ сделать это:

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

    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]
    
+28
14 февр. '14 в 13:25
источник

Решение 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
+10
03 февр. '16 в 10:08
источник

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

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

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

Запрос

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

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

Выполните следующие шаги:

  • Список всех существующих ограничений по умолчанию для столбцов.

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

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'

cheers @!!!

+6
24 февр. '15 в 5:25
источник
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
+4
27 янв. '14 в 13:52
источник

Просто нашел 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 
+3
13 дек. '17 в 10:10
источник

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

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
+2
28 янв. '14 в 10:46
источник

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

-- 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;
+2
17 авг. '18 в 12:24
источник

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

qaru.site/questions/221676/...

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]
+2
20 мар. '18 в 19:57
источник

Как ответ Yuck с проверкой, чтобы позволить script запускать более одного раза без ошибок. (меньше кода/пользовательских строк, чем использование информационных_схем.колонны)

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
+1
02 июн. '17 в 5:01
источник

Вы можете использовать следующий синтаксис. Для получения дополнительной информации см. Этот вопрос и ответы: Добавьте столбец со значением по умолчанию к существующей таблице в 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.

0
03 июл. '19 в 9:54
источник
SELECT * FROM  @tempData

WHILE ((ВЫБЕРИТЕ СЧЕТЧИК (*) ИЗ @tempData)> 0) НАЧАТЬ ОБЪЯВИТЬ @tableName nvarchar (256), @column_name nvarchar (256), @constraint_name nvarchar (256) = '' DECLARE @sqlCommand varchar (1000), @newDefault DATETIME = DATEADD (ДЕНЬ, -5, GETDATE()) SELECT TOP 1 @tableName = имя_таблицы, @имя_ столбца = имя_столбца, @ограничение_имя = имя_крепления FROM @tempData SET @sqlCommand = 'ALTER TABLE' + @tableName+ 'DROP CONSTRAINT '+ @constraint_name EXEC (@sqlCommand) SET @sqlCommand =' изменить таблицу '+ @tableName+' добавить ограничение '+ @constraint_name+' default '' '+CAST (@newDefaultValue AS varchar) +' '' для '+ @column_name print' изменить таблицу '+ @tableName+' добавить ограничение '+ @constraint_name+' default '' '+CAST (@newDefaultValue AS varchar) +' '' для '+ @column_name EXEC (@sqlCommand ) УДАЛИТЬ ТОП (1) ОТ @tempData END

0
17 июн. '19 в 12:36
источник

DECLARE @tempData TABLE (имя_таблицы nvarchar (250), имя-столбца nvarchar (250), имя-ограничения nvarchar (250)) INSERT INTO @tempData выбрать имя_схемы (t.schema_id) + '.' + t. [имя] как [таблица], столбец [имя] как имя_ столбца, con. [имя] как имя_ограничения из sys.default_constraints con левое внешнее соединение sys.objects t для con.parent_object_id = t.object_id левое внешнее соединение sys.all_columns col on con.parent_column_id = col.column_id и con.parent_object_id = col.object_identer код здесь, где con. [определение] как '% getdate%' упорядочено по schema_name (t.schema_id) + '.' + т. [имя], col.column_id

0
17 июн. '19 в 12:40
источник

Посмотрите другие вопросы по меткам или Задайте вопрос