wake-up-neo.net

Wie kann ich eine eindeutige SQL-Einschränkung erstellen, die auf zwei Spalten basiert?

Ich habe einen Tisch wie diesen:

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

Ich muss dieser Tabelle eine Einschränkung hinzufügen, damit kein Benutzer doppelte Kontakt-IDs haben kann. Die Benutzer importieren Daten von verschiedenen externen Systemen, sodass ContactId nicht auf der ganzen Linie eindeutig ist, sondern auf Benutzerbasis.

Ich weiß, wie man eindeutige und Nicht-Null-Beschränkungen basierend auf einzelnen Spalten erstellt, aber wie kann ich eindeutige Beschränkungen über 2 Spalten erstellen?

56
brendan

Sie können dies versuchen:

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

oder

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

Sie können Ihren Feldern eine eindeutige Einschränkung hinzufügen:

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

Sie können ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN) versuchen.

Hoffe das hilft Prost.

6
Tamseyc

Hier ist die Syntax zum Erstellen eines eindeutigen CONSTRAINT im Gegensatz zu einem eindeutigen INDEX.

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

Es ist wichtig zu beachten, dass es geringfügige Unterschiede gibt, die davon abhängen, mit welcher Methode Sie die Eindeutigkeit einer Spalte ermitteln.

In der folgenden MSDN-Referenz finden Sie eine interessante exemplarische Vorgehensweise:

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