Как разместить уникальные ограничения для нескольких столбцов

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)