2011-07-30 30 views
6

Tôi có bảng và tôi muốn thả hoặc đặt giá trị mặc định của một trong các cột. Tôi sử dụng dưới đây kịch bản:Trợ giúp để giải quyết giá trị mặc định cột thả của lỗi bảng

ALTER TABLE AccAccountGroup ALTER COLUMN Name DROP DEFAULT 

ALTER TABLE AccAccountGroup ALTER COLUMN Name SET DEFAULT 'default value' 

khi tôi chạy các kịch bản, bên dưới các lỗi xuất hiện:

Incorrect syntax near the keyword 'DEFAULT'. => cho thả kịch bản

Incorrect syntax near the keyword 'SET'. => cho add script

các kịch bản từ msdn.

Sự cố là gì? Tôi sử dụng SQL Server 2008 R2.

Trả lời

6

Tôi tin rằng tham chiếu của bạn là dành cho SQL Server Compact Edition. Sử dụng this one để thay thế.

Bạn cần sử dụng cú pháp CONSTRAINT và bạn cần sử dụng tên mặc định. Mặc dù bạn không chỉ định tên (và tôi khuyên bạn nên làm trong tương lai vì đó là một thực hành tốt), SQL Server sẽ gán một tên, mà bạn có thể tìm thấy bằng cách sử dụng EXEC sp_help AccAccountGroup.

Hãy thử những cú pháp:

ALTER TABLE AccAccountGroup 
DROP CONSTRAINT <default name> 

ALTER TABLE AccAccountGroup 
ADD CONSTRAINT DF_AccAccountGroup_name DEFAULT 'default value' FOR name 
+0

Không phải là cú pháp "ALTER TABLE AccAccountGroup thả CONSTRAINT ' – jose

+0

Không chắc làm thế nào mà đã bỏ lỡ rất lâu, nhưng nó sửa chữa và kiểm tra bây giờ Thanks?. –

5

Liên kết bạn cung cấp chỉ đề cập đến SQL Server Compact Edition, không phải là SQL Server đầy đủ. Các câu lệnh trên chỉ hợp lệ trong SQL Server Compact Edition.

Trong SQL Server đầy đủ, giá trị mặc định cho cột được triển khai bằng các ràng buộc. Bạn có thể thêm một hạn chế mặc định vào một bảng sử dụng một cái gì đó giống như

ALTER TABLE AccAccountGroup ADD CONSTRAINT AccAcctGrp_Name_Def DEFAULT 'default value' FOR name; 

và thả nó sử dụng

ALTER TABLE AccAccountGroup DROP CONSTRAINT AccAcctGrp_Name_Def; 

Lưu ý rằng bạn cần phải cung cấp tên của các hạn chế khi bạn thả nó. Nếu bạn không biết tên của ràng buộc, truy vấn sau sẽ tìm kiếm nó. Thay đổi tên schema dbo, và cũng là bảng và cột tên, nếu/khi cần thiết:

SELECT object_name(default_object_id) 
    FROM sys.columns 
WHERE object_id = object_id('dbo.AccAccountGroup') 
    AND name = 'Name'; 

Một khi bạn đã có tên của ràng buộc, bạn có thể thả nó. (Lời cảm ơn: truy vấn này được lấy từ một bình luận được đăng here.)

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