Comment puis-je 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'append une contrainte à cette table afin qu'aucun user ne puisse avoir des identifiants de contact en double. Les users importent des données provenant de divers systèmes externes, ainsi ContactId ne sera pas unique à tous les niveaux, mais sera unique pour chaque user.

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

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] 

Vous pouvez append une contrainte unique à vos champs:

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

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

J'espère que cela aidera les acclamations.

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 qui dépendent de la méthode utilisée pour l'unicité d'une colonne.

Consultez la reference MSDN suivante pour une visite guidée intéressante de ceux-ci:

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

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