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