这在SQL Server 2008中不起作用:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

错误是:

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

我做错了什么?


当前回答

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

在创建表的时候 修改现有表的现有列。


在创建表/创建新列时。

查询

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'

欢呼声@ ! !

其他回答

ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

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

第一次掉落约束

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]

正确的做法如下:

执行如下命令: Sp_help[表名] 复制约束的名称。 删除默认约束: ALTER TABLE[表名]DROP[约束名] 运行如下命令: 修改表[表名]为[列名]添加默认值[默认值]

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