Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server 2012 CHECK-Einschränkung wird bei UPDATE- oder DELETE-Anweisungen nicht ausgelöst

Auf diese Weise können wir die Überprüfung auf Aktualisierung erzwingen.
Nehmen wir an, Sie haben eine Tabelle wie diese

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

Jetzt wollen wir überprüfen, ob nur 1 Benutzer durch [GroupId] aktiviert ist .

Normalerweise sieht die Einschränkung in etwa so aus

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

Diese Einschränkung wird nicht ausgelöst, wenn der Datensatz aktualisiert wurde, bis Sie die GroupId aktualisieren .
Also müssen wir die Einschränkung erzwingen, um die IsEnabled-Spalte zu validieren, indem wir Folgendes tun

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

Egal, ob Sie den IsEnabled-Wert in der Funktion verwenden oder nicht.