尝试向现有表添加约束时,“无法创建默认约束”错误

时间:2013-08-09 14:42:08

标签: sql sql-server constraints alter-table

我想在SQL Server中使用ALTER TABLE添加默认约束,但我收到了以下错误消息。

  

表'Register'中的'StartDate'列无效,无法创建   默认约束。

我知道我可以在创建表时声明约束,但这不是我所处的情况。我希望有人可以帮助我;)

这是我的alter声明:

ALTER TABLE [dbo].[Register]
  ADD CONSTRAINT [Register_StartDate] DEFAULT (GETDATE()) FOR StartDate 

这是我的创建表脚本:

CREATE TABLE [dbo].[Register]
  (
     [ID]        [INT] IDENTITY(1, 1) NOT NULL,
     /* ....*/
     [StartDate] [DATETIME] NULL
  ) 

已修改:已修复:我忘记了[StartDate]字段在表格中甚至不存在。我的坏!

2 个答案:

答案 0 :(得分:9)

据我所知,有两种情况可能导致此错误。

尝试将默认约束添加到:

  1. 计算列。
  2. 根本不存在的列!
  3. 表格定义

    CREATE TABLE dbo.Register
      (
         ID INT IDENTITY(1, 1) NOT NULL,
         Computed AS 'Foo'
      ) 
    

    以下两个语句都失败,错误1752。

    ALTER TABLE dbo.Register
      ADD CONSTRAINT C1 DEFAULT 'X' FOR Computed
    
    ALTER TABLE [dbo].[Register]
      ADD CONSTRAINT [Register_StartDate] DEFAULT (GETDATE()) FOR StartDate 
    

    various other conditions上不允许向列添加默认约束,但这些都有自己唯一的错误编号和消息。

    +------------------------------------+--------------+
    |               Reason               | Error number |
    +------------------------------------+--------------+
    | Column is IDENTITY                 |         1754 |
    | Column is timestamp/rowversion     |         1755 |
    | Sparse Column                      |         1791 |
    | Default constraint already present |         1781 |
    +------------------------------------+--------------+
    

答案 1 :(得分:1)

错误1752建议约束定义中引用的列名不存在。 交叉检查表中是否存在列,或者我们是否在默认约束定义中引用了错误的名称。