2011-02-11 66 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)