2017-02-13 15 views
2

2つの列に一意のキーを比較的に適用する方法を教えてください。 2つの列FK_Col1とFK_Col2があるとし、両方の列に2と6を挿入すると、両方の列に2と6または6と2を再び挿入できないはずです。2つの列に一意のキーがあります。

私はこれを達成する方法を提案します。事前

+0

が作るそれuniquieキー –

+0

ALTER TABLEのTestTable のADD CONSTRAINT uq_FK_Col1_FK_Col2 UNIQUE(column1の、column2の); –

+0

複合主キー、一意制約、または一意インデックスは、複数の行が同じ値を持つことを保証しません。 –

答えて

0

おかげテーブル

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

または

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

この場合、列の順序は重要ではないので、これは質問に答えません(今は正しく見ています)。 – DavidG

+0

あなたの親切な返事をお寄せいただきありがとうございます。これは私の問題を解決しませんが、一意のキー制約を可換にしたいので、(FK_Key1、FK_Key2)にそれぞれ(2,6)を挿入すれば、 2,6)または(6,2)の両方の列に表示されます。 – user4365176

2

を作成しながら、計算列とそれにユニーク制約を作成します。トリックは、我々は計算列が同じ両方(2),(6)の値と(6),(2)のために持つようにしたいということです。

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)) 
関連する問題