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

SQL Server 2012 CHECK-begrænsning udløses ikke ved UPDATE- eller DELETE-sætninger

Vi kan tvinge check på opdatering på denne måde.
Lad os antage, at du har et bord som dette

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

Nu vil vi kontrollere, at kun 1 bruger er aktiveret af [GroupId] .

Normalt vil begrænsningen ligne

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

Denne begrænsning vil ikke blive udløst over registreringen, der er blevet opdateret, før du opdaterer GroupId .
Så vi er nødt til at tvinge begrænsningen til at validere IsEnabled-kolonnen ved at gøre

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

Uanset om du bruger IsEnabled-værdien i funktionen eller ej.




  1. sql-maven-plugin med flere afgrænsere

  2. hvor mange joins kan en sql-forespørgsel have

  3. Postgres:\copy syntaksfejl i .sql-fil

  4. Hvorfor bruge Vælg Top 100 procent?