Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La contrainte SQL Server 2012 CHECK ne se déclenche pas sur les instructions UPDATE ou DELETE

Nous pouvons forcer la vérification de la mise à jour de cette manière.
Supposons que vous ayez une table comme celle-ci

create table UserTest(Id int, IsEnabled bit, [GroupId] int)

Maintenant, nous voulons vérifier qu'un seul utilisateur est activé par [GroupId] .

Habituellement, la contrainte ressemblera à quelque chose comme

ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled  CHECK (dbo.checkOnlyOne(GroupId)=1)

Cette contrainte ne sera pas déclenchée sur l'enregistrement mis à jour jusqu'à ce que vous mettiez à jour le GroupId .
Il faut donc forcer la contrainte à valider la colonne IsEnabled en faisant

ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled  CHECK (dbo.checkOnlyOne(GroupId, IsEnabled )=1)

Peu importe si vous utilisez ou non la valeur IsEnabled dans la fonction.