我有一张这样的桌子:
CREATE TABLE [dbo].[BigTable]
(
[BigTableId] [int] IDENTITY(1,1) NOT NULL,
[MuchText] [nvarchar](10) NOT NULL,
[Type] [smallint] NOT NULL
(...)
)
MuchText
列可以存储任何文本值,而Type
列可以存储数字1、2、3、4。我想在
MuchText
和Type
列上创建唯一索引,或将给我类似结果的东西(因此,两个值的组合将被强制为唯一)。但这是问题所在-我想将
Type
列中的某些值视为一个。让我解释一下它应该如何工作:Type = 1
和MuchText = 'XXX'
的记录已经存在Type = 1
和MuchText = 'XXX'
的记录Type = 1
和MuchText = 'XXX'
的记录已经存在Type = 2
和MuchText = 'XXX'
的记录Type = 1
和MuchText = 'XXX'
的记录,则禁止插入值Type = 3
和MuchText = 'XXX'
的记录等,对于类型1/2/3,等等,但是对于类型= 4,它的行为应类似于经典唯一索引:
Type = 4
,如果具有Type = 4
和MuchText = 'XXX'
值的记录已经存在Type = 4
和MuchText = 'XXX'
值的记录因此,这不可能:
但这没关系:
最佳答案
您可以使用CREATE INDEX ... WHERE (cond)
使用Filtered Indexes。
CREATE UNIQUE INDEX UK_BigTable123 ON BigTable (MuchText)
WHERE Type IN (1, 2, 3)
CREATE UNIQUE INDEX UK_BigTable4 ON BigTable (MuchText)
WHERE Type = 4