13

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] フィールドがテーブルに存在しないことを忘れていました。悪い!

4

2 に答える 2

12

私の知る限り、このエラーを引き起こす可能性のある状況が 2 つあります。

デフォルトの制約を以下に追加しようとしています:

  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 に答える