2012-12-11 54 views
19

Tôi đang sử dụng máy chủ sql 2008. Tôi cần phải tìm nếu ràng buộc giá trị mặc định không tồn tại sau đó tạo ra nó. Đây là những gì tôi đã thử.Làm cách nào để kiểm tra NẾU Ràng buộc giá trị mặc định tồn tại không tồn tại?

IF (NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME ='MyConstraint')) 
BEGIN 
    ALTER TABLE [XX] ADD CONSTRAINT [MyConstraint] DEFAULT ((-1)) FOR [XXXX] 
END 
GO 

Trả lời

38
if not exists (
    select * 
     from sys.all_columns c 
     join sys.tables t on t.object_id = c.object_id 
     join sys.schemas s on s.schema_id = t.schema_id 
     join sys.default_constraints d on c.default_object_id = d.object_id 
    where t.name = 'table' 
     and c.name = 'column' 
     and s.name = 'schema') 
    .... 
+3

Tính đến SQL Server 2005, nó được khuyến khích sử dụng các khung nhìn danh mục từ 'sys' schema - 'sys.columns', 'sys.tables' - thay vì' sysobjects' vv Những thứ đó sẽ bị loại bỏ khỏi phiên bản tương lai của SQL Server –

+0

@marc_s Tôi đã thay đổi mã, nhưng 'sysobjects' vv khả năng tương thích xem sẽ có khoảng một ** dài ** thời gian nào, ít nhất là qua phiên bản tiếp theo của SQL Server. Các tính năng Engine cơ sở dữ liệu SQL Server sau được hỗ trợ trong phiên bản ** tiếp theo ** của SQL Server, nhưng sẽ bị xóa trong phiên bản sau. Phiên bản cụ thể của SQL Server chưa được xác định._ [Link] (http://msdn.microsoft.com/en-us/library/ms143729.aspx) – RichardTheKiwi

+1

@RichardTheKiwi - Liên kết của bạn không bao gồm câu thứ ba "Không được chấp nhận các tính năng không nên được sử dụng trong các ứng dụng mới. " –

16

Tôi tìm thấy điều này được dễ dàng hơn:

IF OBJECT_ID('SchemaName.MyConstraint', 'D') IS NULL 
BEGIN 
    -- create it here 
END 
+2

Điều này đã không làm việc cho tôi trong SQL Server 2014. – ryascl

+3

Điều này đã làm việc cho tôi trong SQL Server 2014. –

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