Как разместить уникальные противопоказания на нескольких столбцах - PullRequest
14 голосов
/ 11 февраля 2011
EmpID DeptID

1     1
1     2
2     1
3     2
4     5
5     2
1     1   
2     1   

Я хотел бы иметь ограничение, которое гарантирует, что пара полей всегда уникальна, такие данные, как последние два, показанные в примере, не должны вставляться в таблицу. обратите внимание, что последние две строки являются дубликатами, я хотел бы предотвратить появление таких данных. Как мне добиться этого в sqlserver 2005. Спасибо

Ответы [ 4 ]

15 голосов
/ 11 февраля 2011
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)
)
5 голосов
/ 11 февраля 2011

После того, как вы просмотрели и удалили дубликаты, запустите следующее (подставляя соответствующие имена)

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)
)

(Может также сделать его первичным ключом, если у вас нет другого в таблице)

4 голосов
/ 11 февраля 2011

ALTER TABLE dbo.YOURTABLE ADD CONSTRAINT IX_YOURTABLE UNIQUE NONCLUSTERED (EmpID, DeptID)

1 голос
/ 11 февраля 2011
select empID, deptID from table
group by empID, deptID

РЕДАКТИРОВАТЬ:

Если вы говорите, что эти данные должны быть уникальными в самой таблице, т. Е. Вставка дубликатов не должна быть разрешена, то вам нужно определить составнойключ (empID, deptID) для этой таблицы.

alter table <tablename> add constraint <compositekeyname> primary key (empID, deptID)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...