EmpID DeptID
1 1
1 2
2 1
3 2
4 5
5 2
1 1
2 1
我希望有一个约束条件,确保此字段对的唯一性,例如上面示例中最后两行数据不能插入到表中。请注意,最后两行数据是重复的,我希望防止这种情况发生。 如何在SQLServer 2005中实现?谢谢。
EmpID DeptID
1 1
1 2
2 1
3 2
4 5
5 2
1 1
2 1
我希望有一个约束条件,确保此字段对的唯一性,例如上面示例中最后两行数据不能插入到表中。请注意,最后两行数据是重复的,我希望防止这种情况发生。 如何在SQLServer 2005中实现?谢谢。
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)
)
在你去除重复项之后,运行以下代码(替换适当的名称)
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)
)
最好将其作为主键,除非你在表中有其他主键。
ALTER TABLE dbo.YOURTABLE ADD CONSTRAINT IX_YOURTABLE UNIQUE NONCLUSTERED (EmpID, DeptID)
select empID, deptID from table
group by empID, deptID
编辑:
如果您的意思是这个数据在表中必须是唯一的,也就是说不允许插入重复的数据,那么您需要在这个表上定义一个复合主键(empID,deptID)。
alter table <tablename> add constraint <compositekeyname> primary key (empID, deptID)