2011-02-11 168 views
13
EmpID DeptID 

1  1 
1  2 
2  1 
3  2 
4  5 
5  2 
1  1 
2  1 

我想要一個約束條件來確保該對字段總是唯一的,例如示例中最後兩個的數據不應該是可插入的在上表 請注意,最後兩行是重複的,我想阻止這種數據發生。 如何在SQLSERVER實現這一2005.Thanks如何在多列上設置唯一的約束條件

回答

13
ALTER TABLE <YourTable, sysname, Emp> 
ADD CONSTRAINT <YourConstraintName, sysname, uix> 
UNIQUE NONCLUSTERED (EmpID,DeptID) 

(粘貼到SSMS和使用(Ctrl + Shift + M))

或者在創建表做到這一點,因爲它聽起來好像沒有別的選擇鍵使用。

CREATE TABLE T1 (
    EmpID int not null, 
    DeptID int not null, 
    /* Other Columns */ 
    constraint PK_T1 PRIMARY KEY (EmpID,DeptID) 
) 

(不妨:

CREATE TABLE EMPLOYEE_DEPARTMENT(
    EmpID int NOT NULL REFERENCES EMPLOYEE(EmpID), 
    DeptID int NOT NULL REFERENCES DEPARTMENT(DeptID), 
CONSTRAINT PK_EMPLOYEE_DEPARTMENT PRIMARY KEY CLUSTERED (EmpID ASC,DeptID ASC) 
) 
+0

謝謝,有沒有什麼可以在表創建過程中完成。 – Thunder 2011-02-11 11:23:40

1
select empID, deptID from table 
group by empID, deptID 

編輯:

如果你說這個數據必須在表本身獨特的,即重複的插入不應該被允許,那麼您需要在此表上定義一個組合鍵(empID,deptID)。

alter table <tablename> add constraint <compositekeyname> primary key (empID, deptID) 
+0

我正在尋找一個放置在創建表上的禁忌,而不是選擇時。 – Thunder 2011-02-11 11:21:18

4

你已經經歷了,並刪除重複項後,創建表時運行以下(替換適當的名稱)

ALTER TABLE table ADD CONSTRAINT UQ_EmpID_DeptID UNIQUE (EmpID,DeptID) 

或者使它成爲主鍵,除非你在表中有另一個)

4

ALTER TABLE dbo.YOURTABLE ADD CONSTRAINT IX_YOURTABLE UNIQUE NONCLUSTERED (EmpID, DeptID)