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?
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]
Sie können Ihren Feldern eine eindeutige Einschränkung hinzufügen:
ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
Sie können ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN)
versuchen.
Hoffe das hilft Prost.
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
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
)
)