48

Tengo una tabla como la siguiente:¿Cómo puedo crear una restricción única de SQL basada en 2 columnas?

|UserId | ContactID | ContactName 
--------------------------------------- 
| 12456 | Ax759  | Joe Smith 
| 12456 | Ax760  | Mary Smith 
| 12458 | Ax739  | Carl Lewis 
| 12460 | Ax759  | Chuck Norris 
| 12460 | Bx759  | Bruce Lee 

tengo que añadir una restricción a esta tabla para que ningún usuario puede tener duplicados de contacto de identificación. Los usuarios están importando datos de varios sistemas externos, por lo que ContactId no será único en todos los ámbitos, sino que será único por usuario.

Sé cómo crear contraints únicos y no nulos basados ​​en columnas individuales, pero ¿cómo puedo crear contraints únicos en 2 columnas?

Respuesta

51

Puede probar esto:

CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2) 
or 
CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2) 

o

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT 
UNIQUE_Table UNIQUE CLUSTERED 
(
col1, 
col2 
) ON [PRIMARY] 
+1

¿Cuál es la diferencia entre los dos métodos? ¿Hay ciertos casos en que uno es preferido sobre el otro? ¿El enfoque del índice será más rápido en un gran conjunto de datos? – Zapnologica

+1

@Zapnologica Consulte esta otra pregunta sobre este tema específico: http://dba.stackexchange.com/questions/144/when-should-i-use-a-unique-constraint-instead-of-a-unique-index – Jonathan

26

Puede añadir restricción única Tou sus campos:

ALTER TABLE YourTable 
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID) 
+0

¡Gracias! Funciona bien –

1
CREATE TABLE [LineItems](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [OrderID] [int] NOT NULL, 
    [LineItemNumber] [int] NOT NULL, 
CONSTRAINT [PK_LineItems] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
), 
CONSTRAINT [UC_LineItems] UNIQUE NONCLUSTERED 
(
    [OrderID] ASC, 
    [LineItemNumber] ASC 
) 
) 
3

Ésta es la sintaxis para la creación de una RESTRICCIÓN única en comparación con un ÍNDICE único.

ALTER TABLE publishers 
    ADD CONSTRAINT uqc_pub_name 
    UNIQUE (pub_name) 

Es importante tener en cuenta que existen diferencias sutiles que dependen de qué método se utiliza para enfore la singularidad de una columna.

Consulte la siguiente referencia de MSDN para un tutorial interesante de estos:

http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

6

Usted puede intentar ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN).

Espero que esto ayude aplausos.

Cuestiones relacionadas