2010-09-22 37 views
96

Trong SQL Server, tôi có một cột mới vào một bảng:Tôi có thể tạo ràng buộc mặc định được đặt tên trong câu lệnh thêm cột trong SQL Server không?

ALTER TABLE t_tableName 
    ADD newColumn NOT NULL 

này sai vì tôi chỉ định NOT NULL mà không chỉ định một hạn chế mặc định. Bảng không nên có ràng buộc mặc định.

Để giải quyết vấn đề này, tôi có thể tạo bảng có ràng buộc mặc định và sau đó xóa nó. Tuy nhiên, dường như không có bất kỳ cách nào để xác định rằng ràng buộc mặc định nên được đặt tên như là một phần của tuyên bố này, vì vậy cách duy nhất của tôi để loại bỏ nó là để có một thủ tục được lưu trữ tìm kiếm trong đó bảng sys.default_constraints.

Đây là một chút lộn xộn/tiết cho một hoạt động có khả năng xảy ra rất nhiều. Có ai có bất kỳ giải pháp tốt hơn cho việc này?

Trả lời

149

này nên làm việc:

ALTER TABLE t_tableName 
    ADD newColumn VARCHAR(50) 
    CONSTRAINT YourContraintName DEFAULT '' NOT NULL 
+0

trình trong năm 2012 quá. Chi tiết Gory: http://msdn.microsoft.com/en-us/library/ms187742.aspx – adam77

1

Tôi có thể tạo cột không có NOT NULL, chạy bản cập nhật vào ngày hiện tại, sau đó thay đổi cột để có NOT NULL. Tôi lo ngại về những tác động về hiệu suất của điều này, ví dụ nếu nó nằm trên một bảng nhiều triệu hàng, vì vậy điều này có vẻ ít hơn lý tưởng.

53
ALTER TABLE t_tableName 
    ADD newColumn int NOT NULL 
     CONSTRAINT DF_defaultvalue DEFAULT (1) 
+12

Tôi thích điều này cho câu trả lời được chấp nhận vì tôi có thể bỏ ràng buộc mặc định mà không đáng lo ngại về việc mất ràng buộc NOT NULL. – EleventhDoctor

+4

@EleventhDoctor Điều đó không có ý nghĩa gì cả. NOT NULL không phải là một phần của ràng buộc và câu lệnh thả chỉ tham chiếu đến tên ràng buộc –

+4

@RogerWillcocks Bạn nói đúng, nhưng rõ ràng hơn khi đọc nó rằng NOT NULL tách biệt khỏi ràng buộc. – deluxxxe

Các vấn đề liên quan