sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2012 CHECK-begränsning aktiveras inte vid UPDATE- eller DELETE-satser

Vi kan tvinga fram kontrollen av uppdateringen på det här sättet.
Anta att du har en sådan här tabell

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

Nu vill vi kontrollera att endast 1 användare är aktiverad av [GroupId] .

Vanligtvis ser begränsningen ut ungefär som

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

Denna begränsning kommer inte att utlösas över posten som har uppdaterats förrän du uppdaterar GroupId .
Så vi måste tvinga begränsningen för att validera IsEnabled-kolumnen genom att göra

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

Det spelar ingen roll om du använder IsEnabled-värdet i funktionen eller inte.




  1. Körs WITH-satsen en gång per fråga eller en gång per rad?

  2. Det går inte att ansluta från Intellij till mySql som körs i docker-container - specificerad databasanvändare/lösenordskombination avvisas

  3. Lagring av värden med apostrof i databasen

  4. Kolumnräkningen för mysql.user är fel. Förväntat 42, hittat 44. Tabellen är troligen skadad