如何在多列上放置唯一约束

时间:2011-02-11 11:14:55

标签: sql sql-server constraints

EmpID DeptID

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

我希望有一个约束来确保这对字段始终是唯一的,例如示例中显示的最后两个数据不应该插入到表中。在上表中 请注意,最后两行是重复的,我想防止这样的数据发生。 我如何在sqlserver 2005中实现这一点。谢谢

4 个答案:

答案 0 :(得分:15)

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

(粘贴到SSMS并使用(CTRL + Shift + M))

或者在创建表格时这样做,因为它听起来好像没有其他关键用途。

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)
)

答案 1 :(得分:5)

完成并删除重复项后,运行以下命令(替换相应的名称)

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

或者在创建表格时:

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

(也可以把它作为主键,除非你在表中有另一个)

答案 2 :(得分:4)

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

答案 3 :(得分:1)

select empID, deptID from table
group by empID, deptID

编辑:

如果您说这个数据在表本身中必须是唯一的,即不允许插入重复项,那么您需要在此表上定义一个复合键(empID,deptID)。

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