EmpID DeptID
1 1
1 2
2 1
3 2
4 5
5 2
1 1
2 1
我希望有一个约束来确保这对字段始终是唯一的,例如示例中显示的最后两个数据不应该插入到表中。在上表中 请注意,最后两行是重复的,我想防止这样的数据发生。 我如何在sqlserver 2005中实现这一点。谢谢
答案 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)