我有一个表,只希望有唯一的字符串组合:
colA colB
---- ----
bob tom
ann bob
tom tom
如何约束此表,以便不能插入(tom, bob)
?由于第一条记录中存在(bob, tom)
,因此这是一个不唯一的组合。
有人问过类似的问题here,但我认为这个问题的重点在于数据是整数时的处理方式。
答案 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)