Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2012 CHECK ograniczenie nie uruchamia się na instrukcjach UPDATE lub DELETE

W ten sposób możemy wymusić sprawdzenie aktualizacji.
Załóżmy, że masz taką tabelę

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

Teraz chcemy sprawdzić, czy tylko 1 użytkownik jest włączony przez [GroupId] .

Zazwyczaj ograniczenie będzie wyglądać mniej więcej tak

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

To ograniczenie nie zostanie uruchomione po zaktualizowaniu rekordu, dopóki nie zaktualizujesz GroupId .
Więc musimy wymusić na ograniczeniu walidację kolumny IsEnabled, wykonując

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

Nie ma znaczenia, czy użyjesz wartości IsEnabled w funkcji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. na czym polega problem z AttachDbFilename?

  2. jak zmienić log_reuse_wait i log_reuse_wait_desc

  3. SQL Server 2005/2008 Grupuj według instrukcji z parametrami bez użycia dynamicznego SQL?

  4. SQLServer a StateServer dla wydajności stanu sesji ASP.NET

  5. Wyszukiwać hasło w wielu kolumnach tabeli?