如何为现有列设置默认值

这在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 column,而是使用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的解决scheme是完美的,谢谢,但我也需要它可以重新运行,并find这种方法来检查是否已经完成…

 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 
 ALTER TABLE [dbo].[Employee] ADD DEFAULT ('N') FOR [CityBorn] 

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

  1. 在创build表时
  2. 修改现有表的现有列。

  1. 在创build表/创build新列时。

询问

 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' 

欢呼@!

尝试下面的命令;

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

就像Yuck的答案一样,允许脚本不会错误地运行一次以上。 (比使用information_schema.columns更less的代码/自定义string)

 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