48

Tôi có một bảng như thế này:Làm cách nào để tạo một ràng buộc duy nhất của SQL dựa trên 2 cột?

|UserId | ContactID | ContactName 
--------------------------------------- 
| 12456 | Ax759  | Joe Smith 
| 12456 | Ax760  | Mary Smith 
| 12458 | Ax739  | Carl Lewis 
| 12460 | Ax759  | Chuck Norris 
| 12460 | Bx759  | Bruce Lee 

tôi cần phải thêm một ràng buộc tới bảng này để không sử dụng có thể có liên hệ trùng lặp id của. Người dùng đang nhập dữ liệu từ các hệ thống bên ngoài khác nhau để ContactId không phải là duy nhất trên bảng nhưng sẽ là duy nhất trên cơ sở mỗi người dùng.

Tôi biết cách tạo các đường viền Độc đáo và Không Null dựa trên các cột đơn nhưng làm cách nào tôi có thể tạo một đường viền duy nhất trên 2 cột?

Trả lời

51

Bạn có thể thử này:

CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2) 
or 
CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2) 

hoặc

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT 
UNIQUE_Table UNIQUE CLUSTERED 
(
col1, 
col2 
) ON [PRIMARY] 
+1

Sự khác biệt giữa hai phương pháp là gì? Có một số trường hợp nào đó được ưu tiên hơn trường hợp khác không? Cách tiếp cận chỉ mục có nhanh hơn trên một tập dữ liệu lớn không? – Zapnologica

+1

@Zapnologica Vui lòng kiểm tra câu hỏi khác về chủ đề cụ thể này: http://dba.stackexchange.com/questions/144/when-should-i-use-a-unique-constraint-instead-of-a-unique-index – Jonathan

26

Bạn có thể thêm hạn chế duy nhất Tou lĩnh vực của bạn:

ALTER TABLE YourTable 
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID) 
+0

Cảm ơn! Hoạt động tốt –

1
CREATE TABLE [LineItems](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [OrderID] [int] NOT NULL, 
    [LineItemNumber] [int] NOT NULL, 
CONSTRAINT [PK_LineItems] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
), 
CONSTRAINT [UC_LineItems] UNIQUE NONCLUSTERED 
(
    [OrderID] ASC, 
    [LineItemNumber] ASC 
) 
) 
3

Đây là cú pháp để tạo một CONSTRAINT duy nhất thay vì INDEX duy nhất.

ALTER TABLE publishers 
    ADD CONSTRAINT uqc_pub_name 
    UNIQUE (pub_name) 

Điều quan trọng cần lưu ý là có những khác biệt nhỏ phụ thuộc vào phương pháp bạn sử dụng để làm cho tính độc đáo của cột.

Xem tài liệu tham khảo MSDN sau đây cho một hương thú vị của những:

http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

6

Bạn có thể thử ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN).

Hy vọng điều này sẽ giúp cổ vũ.

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