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



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



ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'


ошибка:




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




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

823   12  

12 ответов:

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

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

не может использовать alter столбец для этого, используйте 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 server не позволяет изменять существующее значение ограничения по умолчанию. Поэтому, чтобы изменить значение по умолчанию, нам нужно удалить существующее системное или пользовательское ограничение по умолчанию. И после этого значение по умолчанию может быть установлено для конкретного столбца.

выполните следующие действия:

  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'

ура @!!!

ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]

просто найдено 3 простых шага, чтобы изменить уже существующий столбец, который был null до

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 Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address

как ответ Юка с проверкой, чтобы позволить скрипту выполняться более одного раза без ошибок. (меньше кода / пользовательских строк, чем при использовании information_schema.колонки)

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

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

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]

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

-- 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;

Comments

    Ничего не найдено.