如何为现有列设置默认值

这在SQL Server 2008中不起作用:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

错误是:

关键字“SET”附近的语法错误。

我做错了什么?

808284 次浏览

不能使用alter列,而是使用add列

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

这将在SQL Server工作:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]

试试下面的命令;

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address

正确的做法如下:

  1. 执行命令:

    sp_help [table name]
    
  2. Copy the name of the CONSTRAINT.

  3. Drop the DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
    
  4. Run the command below:

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    

有两种情况可以更改列的默认值,

  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'

欢呼声@ ! !

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

就像Yuck的答案,检查允许脚本运行多次而没有错误。(与使用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

刚刚发现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 < a href = " 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;

您可以使用以下语法,有关更多信息,请参阅此问题和答案:将具有默认值的列添加到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'或int为1。

ALTER TABLE tblUser
ADD CONSTRAINT DF_User_CreatedON DEFAULT GETDATE() FOR CreatedOn