2017-02-13 3 views
2

bitte schlagen Sie mir vor, wie man eindeutigen Schlüssel auf zwei Spalten verhältnismäßig anwendet. Nehmen wir an, wir haben zwei Spalten FK_Col1 und FK_Col2, und wenn wir 2 und 6 in beide Spalten einfügen, sollten wir nicht in der Lage sein, 2 und 6 oder 6 und 2 in beiden Spalten einzufügen.eindeutiger Schlüssel auf zwei Spalten kommutativ

Plaese schlagen mir vor, wie man das erreicht.

Vielen Dank im Voraus

+0

machen es uniquie Schlüssel –

+0

ALTER TABLE Testtable ADD CONSTRAINT uq_FK_Col1_FK_Col2 UNIQUE (column1, column2); –

+0

Ein zusammengesetzter Primärschlüssel, eine eindeutige Integritätsregel oder ein eindeutiger Index stellen sicher, dass nicht mehr als eine Zeile die gleichen Werte haben kann. –

Antwort

0

während Tabelle

CREATE TABLE table1(
    COLUMN1 INT NOT NULL, 
    COLUMN2 VARCHAR(50) NOT NULL, 
    CONSTRAINT unique_1 UNIQUE (column1, column2) 
) 

oder

ALTER TABLE table1 ADD CONSTRAINT unique_1 UNIQUE(column1, column2) 
+1

Dies beantwortet die Frage nicht (jetzt habe ich es richtig angesehen), da die Reihenfolge der Spalten in diesem Fall nicht wichtig ist. – DavidG

+0

Vielen Dank für Ihre freundliche Antwort, obwohl dies nicht mein Problem löst, wie ich Kommutierung der eindeutigen Schlüssel Constraint, das heißt, wenn wir einmal einfügen (2, 6) in (FK_Key1, FK_Key2) dann sollten wir nicht einfügen können (2, 6) oder (6, 2) in beiden Spalten. – user4365176

2

eine berechnete Spalte und eine eindeutige Einschränkung für sie erstellen zu schaffen. Der Trick besteht darin, dass wir die berechnete Spalte den gleichen Wert für beide (2),(6) und für (6),(2) haben wollen:

create table #t (a int, b int, 
    uq_col as (case when a>b then cast(a as varchar)+'|'+cast(b as varchar) else cast(b as varchar)+'|'+cast(a as varchar) end), 
    constraint uq_t__a_b unique(uq_col)) 
Verwandte Themen