2013-08-09 48 views
9

Tôi muốn thêm ràng buộc mặc định bằng cách sử dụng ALTER TABLE trong SQL Server, nhưng thay vào đó tôi nhận được thông báo lỗi bên dưới.'không hợp lệ để tạo lỗi ràng buộc mặc định' khi cố gắng thêm ràng buộc vào bảng hiện có

Cột 'Ngày bắt đầu' trong bảng 'Đăng ký' không hợp lệ để tạo ràng buộc mặc định. .

Tôi biết rằng tôi có thể tuyên bố một hạn chế khi tôi tạo một bảng, nhưng đó không phải là tình hình tôi trong tôi hy vọng ai đó có thể giúp tôi;)

Đây là tuyên bố alter tôi:

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

Và đây là của tôi kịch bản bảng tạo:

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

được sửa đổi: cố định: tôi từ bỏ t rằng trường [StartDate] không tồn tại trong bảng. Lỗi của tôi!

+0

Điều này làm việc tốt cho tôi. –

+1

Không thể tái tạo - phải có điều gì đó khác đang diễn ra. Bạn có (a) trong cơ sở dữ liệu bên phải, (b) chắc chắn rằng bảng 'Register' của bạn thực sự được tạo ra như thế này, và (c)' StartDate' thực sự là 'DATETIME' trong bảng đó? –

+0

Bạn đã thử thêm ràng buộc mặc định trong khi tạo cột chưa? điều đó có hiệu quả không? – Nilesh

Trả lời

9

Theo như tôi biết, có hai trường hợp có thể có thể gây ra lỗi này.

Cố gắng thêm một hạn chế mặc định:

  1. Một cột tính.
  2. Một cột không tồn tại chút nào!

Đối với định nghĩa bảng

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

Cả hai câu sau đây thất bại với lỗi 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 mà nó không được phép để thêm một hạn chế mặc định cho một nhưng tất cả những cột này đều có số và thông báo lỗi riêng.

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