Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Il vincolo CHECK di SQL Server 2012 non viene attivato sulle istruzioni UPDATE o DELETE

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.