2013-05-27 3 views
0

답변을 찾을 수 없으므로이 공개 질문을 작성하고 있습니다. SQL Server 2008 테이블의 2 개 열에 UNIQUE 제약 조건을 만들 가능성이 있다면 궁금합니다. "정상적인"복제본과 "역순"복제본은 허용되지 않습니다.2 열에 대해 고유 한 제약 조건 (보통 및 역순)

예 :

ID1 = 10, ID2 = 20 -- existing row 

값의 쌍을 추가하려고 :

번째 행을 삽입한다
ID1 = 10, ID2 = 20 -- not allowed because of the UNIQUE key 
ID1 = 20, ID2 = 10 -- allowed 

(물론 중복 아니다). 그리고 그것이 문제입니다. 어떤 키/제약/위의 삽입을 허용하지 테이블에 설정할 수 있습니까? 나는. 뭔가 열 대신에 표현식을 사용합니까? 지금은 그러한 "중복"을 검사하는 트리거를 사용하지만 더 간단한 해결책이 있는지 궁금합니다.

감사합니다, 피터 P.

답변

0
CREATE TABLE dbo.test 
    (ID1 int , ID2 int , 
    CONSTRAINT ID_UK UNIQUE(ID1,ID2), 

    ) 

    GO 


    IF EXISTS (SELECT name FROM sysobjects 
    WHERE name = 'check_val' AND type = 'TR') 
    DROP TRIGGER check_val 
    GO 
    CREATE TRIGGER check_val 
    ON dbo.test 
    FOR INSERT, UPDATE 
    AS 
    if exists (select i.ID1 ,i.ID2 from inserted i inner join dbo.test t 
    on t.ID2=i.ID1 and t.ID1=i.ID2) 

    RAISERROR ('duplicate values', 
    16, 1) 
    ROLLBACK TRANSACTION 

    GO 

    insert dbo.test 
    select 10,20 
    union 
    select 20,10 
+0

@ 피터 :이 코드는 그게 내가 무슨 짓을했는지 – Nishad

+0

당신이 당신의 요구 사항에 따라 트리거, 트랜잭션을 조정할 수 있습니다, 귀하의 요구 사항에 중복 삽입 할 수 없습니다. 방금 트리거를 발사하지 않고도 간단한 해결책이 있다고 생각했습니다. – peterp

+0

질문을 제대로 보지 못했고 해결책에 뛰어 왔습니다. 무시하십시오. – Nishad