EmpID DeptID
1 1
1 2
2 1
3 2
4 5
5 2
1 1
2 1
我想要一个约束条件来确保该对字段总是唯一的,例如示例中最后两个的数据不应该是可插入的在上表 请注意,最后两行是重复的,我想阻止这种数据发生。 如何在SQLSERVER实现这一2005.Thanks如何在多列上设置唯一的约束条件
EmpID DeptID
1 1
1 2
2 1
3 2
4 5
5 2
1 1
2 1
我想要一个约束条件来确保该对字段总是唯一的,例如示例中最后两个的数据不应该是可插入的在上表 请注意,最后两行是重复的,我想阻止这种数据发生。 如何在SQLSERVER实现这一2005.Thanks如何在多列上设置唯一的约束条件
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)
)
select empID, deptID from table
group by empID, deptID
编辑:
如果你说这个数据必须在表本身独特的,即重复的插入不应该被允许,那么您需要在此表上定义一个组合键(empID,deptID)。
alter table <tablename> add constraint <compositekeyname> primary key (empID, deptID)
我正在寻找一个放置在创建表上的禁忌,而不是选择时。 – Thunder 2011-02-11 11:21:18
你已经经历了,并删除重复项后,创建表时运行以下(替换适当的名称)
ALTER TABLE table ADD CONSTRAINT UQ_EmpID_DeptID UNIQUE (EmpID,DeptID)
或者使它成为主键,除非你在表中有另一个)
ALTER TABLE dbo.YOURTABLE ADD CONSTRAINT IX_YOURTABLE UNIQUE NONCLUSTERED (EmpID, DeptID)
谢谢,有没有什么可以在表创建过程中完成。 – Thunder 2011-02-11 11:23:40