sql >> Databáze >  >> RDS >> Sqlserver

Omezení SQL Server 2012 CHECK se nespouští u příkazů UPDATE nebo DELETE

Tímto způsobem můžeme vynutit kontrolu aktualizace.
Předpokládejme, že máte tabulku jako je tato

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

Nyní chceme zkontrolovat, zda je pomocí [GroupId] povolen pouze 1 uživatel .

Obvykle bude omezení vypadat nějak takto

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

Toto omezení se při aktualizaci záznamu nespustí, dokud neaktualizujete GroupId .
Musíme tedy vynutit omezení, aby ověřilo sloupec IsEnabled provedením

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

Nezáleží na tom, zda ve funkci použijete nebo nepoužíváte hodnotu IsEnabled.




  1. Jak funguje TIMESTAMPADD() v MariaDB

  2. Jak vyřeším přetečení zásobníku vláken mysql?

  3. problém s mysqli_real_escape_string a dvojitými uvozovkami

  4. Nelze zkopírovat tabulku do jiné databáze pomocí pg_dump