sql >> Base de Datos >  >> RDS >> Sqlserver

La restricción CHECK de SQL Server 2012 no se activa en las instrucciones UPDATE o DELETE

Podemos forzar la verificación de la actualización de esta manera.
Supongamos que tiene una tabla como esta

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

Ahora, queremos verificar que solo 1 usuario esté habilitado por [GroupId] .

Por lo general, la restricción se verá como

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

Esta restricción no se activará sobre el registro actualizado hasta que actualice el GroupId .
Entonces, tenemos que forzar la restricción para validar la columna IsEnabled haciendo

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

No importa si usa o no el valor IsEnabled en la función.