gpt4 book ai didi

sql - 插入新记录时如何根据列值忽略多列上的唯一索引

转载 作者:搜寻专家 更新时间:2023-10-30 21:43:52 25 4
gpt4 key购买 nike

我们有一个包含三列的表,StudentIdSubjectIdActive(以及一些其他列,但与此问题无关) .

Active 列指示记录是否处于事件状态(如果有人从 UI 中删除记录,我们将此 Active 列设置为零)

StudentIdSubjectId 列的索引定义如下:

CREATE UNIQUE NONCLUSTERED INDEX [UQ_StudentSubject_SubjectId_StudentId]  
ON [dbo].[StudentSubject]
(
[StudentId] ASC,
[SubjectId] 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]

GO

在我们的应用程序中,如果我们尝试使用此 SubjectIdstudentId 的组合插入另一条记录,则插入失败并且 Java 抛出以下错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert duplicate key row in object 'dbo.StudentSubject' with unique index 'UQ_StudentSubject_SubjectId_StudentId'. The duplicate key value is (113460, 182).

组合为 113460、182 的记录的 Active 为零,因此我们尝试插入新记录而不是将 Active 标志设置为 1。

如果我们插入一条新记录,现有的 subjectId 和 studentId 组合的 Active 列为零,那么有什么方法可以在插入时忽略此索引?

编辑很抱歉造成混淆,它是一个索引而不是一个约束。

最佳答案

下面是一个过滤索引的例子,它会忽略 Active 值为 0 的行:

CREATE UNIQUE NONCLUSTERED INDEX UQ_StudentSubject_SubjectId_StudentId  
ON dbo.StudentSubject
(
[StudentId],
[SubjectId]
) WHERE Active <> 0;

关于sql - 插入新记录时如何根据列值忽略多列上的唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32856123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com