1

找不到任何答案,所以我正在写这个开放式问题。我很好奇是否有可能在 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。

4

1 回答 1

1
    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
于 2013-05-28T05:30:30.613 回答