Possiamo forzare il controllo dell'aggiornamento in questo modo.
Supponiamo che tu abbia una tabella come questa
create table UserTest(Id int, IsEnabled bit, [GroupId] int)
Ora, vogliamo verificare che solo 1 utente sia abilitato da [GroupId]
.
Di solito il vincolo sarà simile a
ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled CHECK (dbo.checkOnlyOne(GroupId)=1)
Questo vincolo non verrà attivato se il record è stato aggiornato finché non aggiorni GroupId
.
Quindi, dobbiamo forzare il vincolo per convalidare la colonna IsEnabled facendo
ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled CHECK (dbo.checkOnlyOne(GroupId, IsEnabled )=1)
Non importa se usi o meno il valore IsEnabled nella funzione.