Как разместить уникальные ограничения для нескольких столбцов
EmpID DeptID
1 1
1 2
2 1
3 2
4 5
5 2
1 1
2 1
Я хотел бы иметь ограничение, которое будет гарантировать, что пара полей всегда уникальна, такие данные, как последние два, показанные в примере, не должны вставляться в таблицу. В приведенной выше таблице
обратите внимание, что последние две строки являются дубликатами, я хотел бы предотвратить появление таких данных.
Как достичь этого в sqlserver 2005.Thanks
Ответы
Ответ 1
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)
)
Ответ 2
После того, как вы прошли и удалили дубликаты, запустите следующее (заменяя соответствующие имена)
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)
)
(пусть также сделает его основным ключом, если у вас нет другого в таблице)
Ответ 3
ALTER TABLE dbo.YOURTABLE ADD CONSTRAINT IX_YOURTABLE UNIQUE NONCLUSTERED (EmpID, DeptID)
Ответ 4
select empID, deptID from table
group by empID, deptID
EDIT:
Если вы говорите, что эти данные должны быть уникальными в самой таблице, т.е. вставка дубликатов не должна быть разрешена, тогда вам нужно определить составной ключ (empID, deptID) в этой таблице.
alter table <tablename> add constraint <compositekeyname> primary key (empID, deptID)