如何为现有列设置默认值

Nak*_*ary 350 t-sql sql-server default-value sql-server-2008

这在SQL Server 2008中不起作用:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Run Code Online (Sandbox Code Playgroud)

错误是:

关键字"SET"附近的语法不正确.

我究竟做错了什么?

Yuc*_*uck 541

这将在SQL Server中工作:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
Run Code Online (Sandbox Code Playgroud)

  • 用于指定约束名称的+1,因此SQL Server不会创建随机的名称. (61认同)
  • MSSQL对于调用默认值"约束"很奇怪.如果有的话,他们是_relaxations_; 约束的_opposite_!他们使更多的东西有效,而不是更少. (36认同)
  • @fallenidol _这只适用于列上没有现有默认约束的情况._右,因为根据定义,你不能有多个**默认**值... (4认同)
  • @Yuck.如果它包括检查是否已存在默认值,那么答案会更有用. (4认同)
  • 如果您以另一种方式思考,这并不奇怪:如果您未指定列,则默认约束会阻止MSSQL引发错误.所以它不是用户的约束,而是对MSSQL的约束. (3认同)
  • 仅当列上没有现有默认约束时,此方法才有效. (3认同)

hoo*_*cus 159

ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
Run Code Online (Sandbox Code Playgroud)

  • @Contango我认为最好不要在你需要修改其中一个上面的每一个约束上命名.只需写一个[删除自动命名约束的程序](http://stackoverflow.com/questions/670946/dropping-unnamed-constraints/29370113#29370113),你再也不必命名一个+可以处理所有其他未命名的那些 (10认同)
  • 如果只有一个默认约束...为什么要命名呢?看起来其他数据库引擎提供了添加,更新,删除列的默认值而没有列名以外的任何名称的语法,这是有道理的.如果默认值已存在,则上述代码失败,顺便说一下.令人遗憾的是,SQL Server需要针对系统表进行复杂连接,以识别默认约束的名称,这不应该是必需的,因为列上只能有一个默认约束. (4认同)
  • 这适用于MSSQL,但它的缺点是它没有命名它在幕后创建的约束(参见上面的更高投票答案). (3认同)
  • @Jonny Leeds.好点子.我也喜欢命名约束,因为它是其他任何试图修改(或简单理解)数据库模式的好文档.如果一个人是一个团队中的独立操作员,这就不那么重要了. (3认同)

Car*_*lla 47

不能使用alter column,请改用add

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
Run Code Online (Sandbox Code Playgroud)

  • 不知道为什么这个答案没有得到回报.它与前一个完全相同,之前得到了回答...... (7认同)

小智 28

正确的方法如下:

  1. 运行命令:

    sp_help [table name] 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 复制的名称CONSTRAINT.

  3. 放下DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行以下命令:

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    
    Run Code Online (Sandbox Code Playgroud)

  • StackOverflow.com仅限英语.葡萄牙网站是http://pt.stackoverflow.com/ (4认同)

Dav*_*ave 12

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
Run Code Online (Sandbox Code Playgroud)


Mis*_*ise 7

首次下降约束

/sf/answers/3457513181/

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)
Run Code Online (Sandbox Code Playgroud)

第二步创建默认值

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
Run Code Online (Sandbox Code Playgroud)


ste*_*ave 6

ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
Run Code Online (Sandbox Code Playgroud)


Sun*_*rma 6

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

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

  1. 在创建表/创建新列时.

询问

create table table_name
(
    column_name datatype default 'any default value'
);
Run Code Online (Sandbox Code Playgroud)
  1. 修改现有表的现有列

在这种情况下,我的SQL服务器不允许修改现有的默认约束值.因此,要更改默认值,我们需要删除现有系统生成或用户生成的默认约束.之后,可以为特定列设置默认值.

遵循一些步骤:

  1. 列出列的所有现有默认值约束.

执行此系统数据库过程,它将表名作为参数.它返回表中所有列的所有约束的列表.

execute [dbo].[sp_helpconstraint] 'table_name'
Run Code Online (Sandbox Code Playgroud)
  1. 删除列的现有默认约束.

句法:

alter table 'table_name' drop constraint 'constraint_name'
Run Code Online (Sandbox Code Playgroud)
  1. 为该列添加新的默认值约束:

句法:

alter table 'table_name' add default 'default_value' for 'column_name'
Run Code Online (Sandbox Code Playgroud)

欢呼@ !!!


Dav*_*wzy 5

刚刚发现 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 
Run Code Online (Sandbox Code Playgroud)


tib*_*ibx 5

如果默认名称已经存在限制:

-- 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;
Run Code Online (Sandbox Code Playgroud)


Moh*_*ani 5

您可以使用以下语法,有关详细信息,请参阅此问题和答案:向 SQL Server 中的现有表添加具有默认值的列

句法 :

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
Run Code Online (Sandbox Code Playgroud)

例子 :

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.
Run Code Online (Sandbox Code Playgroud)

其它的办法 :

右键单击表格并单击设计,然后单击要设置默认值的列。

然后在页面底部添加一个默认值或绑定:类似于 '1' 表示字符串或 1 表示 int。