Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

A restrição CHECK do SQL Server 2012 não é acionada em instruções UPDATE ou DELETE


Podemos forçar a verificação de atualização desta forma.
Vamos supor que você tenha uma tabela como esta
create table UserTest(Id int, IsEnabled bit, [GroupId] int)

Agora, queremos verificar se apenas 1 usuário está habilitado por [GroupId] .

Normalmente, a restrição será algo como
ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled  CHECK (dbo.checkOnlyOne(GroupId)=1)

Essa restrição não será acionada sobre o registro atualizado até que você atualize o GroupId .
Então, temos que forçar a restrição para validar a coluna IsEnabled fazendo
ALTER TABLE [dbo].[UserTest] ADD CONSTRAINT CHK_OnlyOneEnabled  CHECK (dbo.checkOnlyOne(GroupId, IsEnabled )=1)

Não importa se você usa ou não o valor IsEnabled na função.