13

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

表 '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] 字段甚至不存在于表中。我的错!

4

2 回答 2

12

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

尝试将默认约束添加到:

  1. 计算列。
  2. 一个根本不存在的专栏!

对于表定义

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 

其他各种情况下,不允许将默认约束添加到列,但这些都有自己独特的错误编号和消息。

+------------------------------------+--------------+
|               Reason               | Error number |
+------------------------------------+--------------+
| Column is IDENTITY                 |         1754 |
| Column is timestamp/rowversion     |         1755 |
| Sparse Column                      |         1791 |
| Default constraint already present |         1781 |
+------------------------------------+--------------+
于 2013-12-14T23:58:47.730 回答
0

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

于 2020-04-06T23:38:41.653 回答