64 votes

Comment créer une contrainte unique SQL basée sur 2 colonnes ?

J'ai une table comme celle-ci :

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

J'ai besoin d'ajouter une contrainte à cette table afin qu'aucun utilisateur ne puisse avoir des identifiants de contact en double. Les utilisateurs importent des données de divers systèmes externes, de sorte que l'identifiant de contact ne sera pas unique pour tous, mais unique pour chaque utilisateur.

Je sais comment créer des contraintes uniques et non nulles basées sur des colonnes uniques, mais comment créer une contrainte unique sur deux colonnes ?

72voto

Jonathan Points 6611

Vous pouvez essayer ceci :

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

o

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]

46voto

AdaTheDev Points 53358

Vous pouvez ajouter une contrainte unique à vos champs :

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

7voto

Tamseyc Points 79

Vous pouvez essayer ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN) .

J'espère que cela vous aidera cheers.

3voto

John Sansom Points 20087

Voici la syntaxe pour créer un CONSTRAINT unique par opposition à un INDEX unique.

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

Il est important de noter qu'il existe des différences subtiles selon la méthode que vous utilisez pour garantir l'unicité d'une colonne.

Voir la référence MSDN suivante pour une présentation intéressante de ceux-ci :

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

3voto

John Saunders Points 118808
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
)
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X