sql - How to ignore unique Index on multiple columns based on column value while inserting new record -


we have table 3 columns, studentid , subjectid , active (and few other columns not related question).

active column indicates whether record active or not(we set active column 0 if deletes records ui)

definition of index on columns studentid , subjectid below:

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 

from our application, if try insert record combination of subjectid , studentid insert failing , java throwing below error:

caused by: com.microsoft.sqlserver.jdbc.sqlserverexception: cannot insert duplicate key row in object 'dbo.studentsubject' unique index 'uq_studentsubject_subjectid_studentid'. duplicate key value (113460, 182).

the record combination 113460, 182 having active 0 so, trying insert new record instead of setting active flag 1.

is there way can ignore index while inserting if insert new record existing combination of subjectid , studentid have active column zero?

edit sorry confusion, index not constraint.

below example of filtered index ignore rows active value 0:

create unique nonclustered index uq_studentsubject_subjectid_studentid   on dbo.studentsubject (     [studentid],     [subjectid] ) active <> 0; 

Comments

Popular posts from this blog

html - Outlook 2010 Anchor (url/address/link) -

javascript - Why does running this loop 9 times take 100x longer than running it 8 times? -

Getting gateway time-out Rails app with Nginx + Puma running on Digital Ocean -