sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012 CHECK-beperking wordt niet geactiveerd bij UPDATE- of DELETE-instructies

Op deze manier kunnen we de controle op update forceren.
Stel dat je een tabel als deze hebt

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

Nu willen we controleren of slechts 1 gebruiker is ingeschakeld door [GroupId] .

Gewoonlijk ziet de beperking er ongeveer zo uit:

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

Deze beperking wordt pas geactiveerd wanneer de record is bijgewerkt nadat u de GroupId . bijwerkt .
Dus we moeten de beperking forceren om de IsEnabled-kolom te valideren door te doen

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

Het maakt niet uit of u de IsEnabled-waarde in de functie gebruikt of niet.




  1. Zijn er in SQL / MySQL redenen om de één-op-één-relatie niet in dezelfde tabel te zetten?

  2. Back-up van MySQL-database

  3. Fout:het type kolom DOB conflicteert met het type andere kolommen gespecificeerd in de UNPIVOT-lijst

  4. Het combineren van SUM(), GROUP_BY() en LEFT_JOIN() geeft onjuiste resultaten:hoe op te lossen?