2011-02-11 4 views
13
EmpID DeptID 

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

Je voudrais avoir une contrainte qui fera en sorte que la paire de champs soit toujours unique, ces données comme les deux dernières montrées dans l'exemple ne devraient pas être insérables dans la table .dans le tableau ci-dessus s'il vous plaît noter que les deux dernières lignes sont des doublons, je voudrais empêcher ces données de se produire. Comment puis-je obtenir ces résultats dans SQLServer 2005.ThanksComment placer une contrainte unique sur plusieurs colonnes

Répondre

13
ALTER TABLE <YourTable, sysname, Emp> 
ADD CONSTRAINT <YourConstraintName, sysname, uix> 
UNIQUE NONCLUSTERED (EmpID,DeptID) 

(Coller dans SSMS et utilisez (CTRL + Maj + M))

Ou pour le faire lors de la création de la table et que cela puisse paraître comme si il n'y a pas d'utilisation clé alternative.

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

Merci, il n'y a pas quelque chose qui peut être fait lors de la création de la table. – Thunder

+0

@Thunder - Votre table possède-t-elle actuellement une clé primaire? –

+0

non c'est juste une table de jointure, avec plusieurs à plusieurs relation – Thunder

1
select empID, deptID from table 
group by empID, deptID 

EDIT:

Si vous dites que ces données doit être unique dans le tableau lui-même, à savoir l'insertion de doublons ne doit pas être autorisée, vous devez définir une clé composite (empID, deptID) sur cette table.

alter table <tablename> add constraint <compositekeyname> primary key (empID, deptID) 
+0

Je cherche une contrainte placée sur créer la table pas en sélectionnant. – Thunder

4

Une fois que vous avez vécu et supprimé les doublons, exécutez la commande suivante (en remplaçant les noms appropriés)

ALTER TABLE table ADD CONSTRAINT UQ_EmpID_DeptID UNIQUE (EmpID,DeptID) 

Ou lors de la création de votre table:

CREATE TABLE T1 (
    EmpID int not null, 
    DeptID int not null, 
    /* Other Columns */ 
    constraint PK_T1 PRIMARY KEY (EmpID,DeptID) 
) 

(mai et en faire la clé primaire, sauf si vous en avez une autre dans la table)

4

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

Questions connexes