2列的唯一约束,但是以正常和反向顺序排列

时间:2013-05-27 16:06:39

标签: sql-server-2008 multiple-columns unique-constraint

找不到任何答案,所以我正在写这个未解决的问题。我很好奇是否有可能在SQL Server 2008表中的2列上创建这样的UNIQUE约束,不允许“正常”和“反向”重复。

示例:

ID1 = 10, ID2 = 20   -- existing row

尝试添加一对值:

ID1 = 10, ID2 = 20   -- not allowed because of the UNIQUE key
ID1 = 20, ID2 = 10   -- allowed

将插入第二行(当然它不是重复的)。这就是问题所在。任何键/约束/在表上设置的任何内容都可以禁止上面的插入吗?即使用表达式而不是列列表的东西?现在我使用一个触发器检查这样的“重复”,但我只是想知道是否有更简单的解决方案。

谢谢, 彼得P。

1 个答案:

答案 0 :(得分: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