所有列组合的唯一约束

时间:2018-10-02 18:17:29

标签: sql-server

我有一个表,只希望有唯一的字符串组合:

colA     colB
----     ----
bob      tom
ann      bob
tom      tom

如何约束此表,以便不能插入(tom, bob)?由于第一条记录中存在(bob, tom),因此这是一个不唯一的组合。

有人问过类似的问题here,但我认为这个问题的重点在于数据是整数时的处理方式。

2 个答案:

答案 0 :(得分:1)

相对于unique index,我更喜欢unique constraint。我发现在需要组合唯一性的列上,无论如何我可能都需要一个索引。 2鸟1石头。

因此,此表:

CREATE TABLE [dbo].[mytable](
    [colA] [varchar](50) NULL,
    [colB] [varchar](50) NULL
) ON [PRIMARY]
GO

您可能会:

CREATE UNIQUE NONCLUSTERED INDEX [UIDX] ON [dbo].[mytable]
(
    [colA] ASC,
    [colB] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

这将防止两次插入(tom, bob)。给定的示例在右列中已经有两次tom,因此我认为第3行是合法的,因此是我的答案,所以 if 我理解这应该起作用的问题。

答案 1 :(得分:0)

您可以使用TRIGGER或CHECK CONSTRAINT进行此操作。

无论哪种方式,您都将检查逻辑并确保其中没有行存在

(NewA = OldA AND NewB=OldB)
OR
(NewA = OldB AND NewB=OldA)