2011-02-11 20 views
13
EmpID DeptID 

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

me gustaría tener una restricción que se asegurará de que el par de campo es siempre único, datos tales como dos últimas se muestran en el ejemplo no se debe insertar-poder en la tabla. en la tabla anterior tenga en cuenta que las dos últimas filas son duplicados, me gustaría evitar que se produzcan dichos datos. ¿Cómo lograr esto en sqlserver 2005.Thanks¿Cómo poner contraint único en múltiples columna

Respuesta

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

(Pegar en SSMS y uso (Ctrl + Shift + M))

O hacer esto en la creación de tablas y como suena como si no existe un uso alternativo clave.

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

Gracias, no hay algo que se pueda hacer durante la creación de la tabla. – Thunder

+0

@Thunder - ¿Su tabla tiene actualmente una clave principal? –

+0

no es solo una tabla de unión, con muchas a muchas relaciones – Thunder

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

EDIT:

Si usted está diciendo estos datos debe ser único en la tabla en sí, es decir, la inserción de los duplicados no se debe permitir, a continuación, necesita definir una clave compuesta (empID, deptID) en esta tabla.

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

Estoy buscando un contraint colocado en crear tabla no durante la selección. – Thunder

4

Después de haber pasado por los duplicados y se retira, ejecute el (los nombres apropiados sustitución) siguiente

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

o al crear la tabla:

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

(mayo, así que sea la clave principal, a menos que tengas otra en la tabla)

4

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

Cuestiones relacionadas