Sql 修改要过滤的约束
我正在考虑将数据库中预先存在的约束转换为过滤约束。这是目前存在的限制:Sql 修改要过滤的约束,sql,sql-server,where-clause,unique-constraint,unique-index,Sql,Sql Server,Where Clause,Unique Constraint,Unique Index,我正在考虑将数据库中预先存在的约束转换为过滤约束。这是目前存在的限制: ALTER TABLE [dbo].[ALIAS] ADD CONSTRAINT [AK_ALIAS001] UNIQUE NONCLUSTERED ( [ASSIGNEDBY] ASC, [ROLETYPE] ASC, [CODEALIAS] ASC, [ALIASASSIGNEDBY] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPU
ALTER TABLE [dbo].[ALIAS] ADD CONSTRAINT [AK_ALIAS001] UNIQUE NONCLUSTERED
(
[ASSIGNEDBY] ASC,
[ROLETYPE] ASC,
[CODEALIAS] ASC,
[ALIASASSIGNEDBY] ASC
)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90)
ON [PRIMARY]
GO
我希望不会丢失该功能,但现在我正在添加一个新的ALIASASSIGNEDBY值,如果ALIASASSIGNEDBY不是1,我需要能够为这些字段提供非唯一的值
根据我的阅读,我认为我应该能够使此约束有条件,但我不确定如何实现。您可以使用唯一的筛选索引来实现这一点:
CREATE UNIQUE INDEX [IDX_ALIAS001]
ON [dbo].[ALIAS] ([ASSIGNEDBY], [ROLETYPE], [CODEALIAS], [ALIASASSIGNEDBY])
WHERE [ALIASASSIGNEDBY] <> 1
创建唯一索引[IDX\u ALIAS001]
在[dbo]。[ALIAS]([ASSIGNEDBY],[ROLETYPE],[CODEALIAS],[ALIASASSIGNEDBY])
其中[ALIASASSIGNEDBY]1
在我阅读您的需求的方式中,您希望在集合中的ALIASASSIGNEDBY=1
的元组上强制执行唯一性(并且,通过扩展,如果ALIASASSIGNEDBY 1
,则一切正常)
如果我有上述正确答案,我会这样做:
create unique index [UIX_ALIAS001] on [dbo].[ALIAS]
([ASSIGNEDBY], [ROLETYPE], [CODEALIAS], [ALIASASSIGNEDBY])
WHERE [ALIASASSIGNEDBY] = 1;
几点注意:
[ALIASASSIGNEDBY]
作为索引中的键列。按照我定义它的方式,所有符合过滤器条件的行都将具有相同的值,因此从强制唯一性的角度来看,它是多余的谢谢你提供的细节!我将研究第3点和第4点,对于第1点,我如何进行测试?这是一个仅尝试它是良性的案例。如果功能已启用,将允许您继续。如果您没有,它将给您一个错误,并且没有进行任何更改。