如何为现有列设置默认值

时间:2011-07-22 14:42:41

标签: sql-server sql-server-2008 tsql default-value

这在SQL Server 2008中不起作用:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

错误是:

  

关键字“SET”附近的语法不正确。

我做错了什么?

14 个答案:

答案 0 :(得分:509)

这适用于SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;

答案 1 :(得分:151)

ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn

答案 2 :(得分:44)

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

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

答案 3 :(得分:27)

执行此操作的正确方法如下:

  1. 运行命令:

    sp_help [table name] 
    
  2. 复制CONSTRAINT

  3. 的名称
  4. 放弃DEFAULT CONSTRAINT

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  5. 运行以下命令:

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

答案 4 :(得分:10)

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

答案 5 :(得分:5)

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

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

    1. 在创建表格/创建新列时。
    2. 查询

      create table table_name
      (
          column_name datatype default 'any default value'
      );
      
      1. 修改现有表的现有列
      2. 在这种情况下,我的SQL服务器不允许修改现有的默认约束值。因此,要更改默认值,我们需要删除现有系统生成或用户生成的默认约束。之后,可以为特定列设置默认值。

        按照以下步骤操作:

        1. 列出列的所有现有默认值约束。
        2. 执行此系统数据库程序,它将表名作为参数。它返回表中所有列的所有约束的列表。

          execute [dbo].[sp_helpconstraint] 'table_name'
          
          1. 删除列的现有默认约束。
          2. 语法:

            alter table 'table_name' drop constraint 'constraint_name'
            
            1. 为该列添加新的默认值约束:
            2. 语法:

              alter table 'table_name' add default 'default_value' for 'column_name'
              
              欢呼@ !!!

答案 6 :(得分:3)

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

答案 7 :(得分:3)

刚刚找到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 

答案 8 :(得分:2)

尝试以下命令;

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

答案 9 :(得分:2)

首先放弃约束

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]

答案 10 :(得分:1)

与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

答案 11 :(得分:1)

以默认名称存在限制的情况下

-- 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;

答案 12 :(得分:0)

您可以使用以下语法,有关更多信息,请参见以下问题和答案:Add a column with a default value to an existing table in 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表示整数。

答案 13 :(得分:0)

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