web-dev-qa-db-fra.com

Comment créer une contrainte SQL unique 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 à ce tableau afin qu'aucun utilisateur ne puisse avoir d'ID de contact en double. Les utilisateurs importent des données à partir de divers systèmes externes, donc ContactId ne sera pas unique à tous les niveaux mais sera unique pour chaque utilisateur.

Je sais comment créer des contraintes uniques et non nulles basées sur des colonnes uniques, mais comment puis-je créer des contraintes uniques sur 2 colonnes?

56
brendan

Vous pouvez essayer ceci:

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

ou

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

Vous pouvez ajouter une contrainte unique à vos champs:

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

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

J'espère que cela aide les acclamations.

6
Tamseyc

Voici la syntaxe pour créer une CONTRAINTE 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 imposer l'unicité d'une colonne.

Reportez-vous à 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

3
John Sansom
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
)
)
1
John Saunders