Це не працює в SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Помилка:
Неправильний синтаксис біля ключового слова "SET".
Що я роблю неправильно?
Це не працює в SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Помилка:
Неправильний синтаксис біля ключового слова "SET".
Що я роблю неправильно?
Відповіді:
Це буде працювати в 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
Правильний спосіб зробити це наступним чином:
Виконайте команду:
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'
ура @ !!!
якщо вже існує обмеження зі своєю назвою за замовчуванням:
-- 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.
Просто знайдено 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
Перше обмеження для краплі
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]
Спробуйте виконати наступну команду;
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
Як і відповідь Юка з чеком, щоб дозволити запускати сценарій не один раз без помилок. (менше кодових / спеціальних рядків, ніж використання стовпців information_schema.collasses)
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