Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ограничението CHECK на SQL Server 2012 не се задейства при изрази UPDATE или DELETE

Можем да принудим проверката на актуализацията по този начин.
Да предположим, че имате таблица като тази

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

Сега искаме да проверим дали само 1 потребител е активиран от [GroupId] .

Обикновено ограничението ще изглежда нещо като

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

Това ограничение няма да бъде задействано върху актуализирания запис, докато не актуализирате GroupId .
Така че трябва да принудим ограничението да потвърди колоната IsEnabled, като направим

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

Няма значение дали използвате или не стойността IsEnabled във функцията.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL:Не може да изпълни обобщена функция AVG на COUNT(*), за да намери най-натоварените часове от деня

  2. Как да сравните две дати, за да намерите часовата разлика в SQL Server 2005, манипулиране на дата

  3. Защо изпълнението на този Sql оператор (с 2 свързвания на таблици) отнема 5 минути?

  4. Преобразуване на DateTime във формат YYYY-MM-DD в SQL Server

  5. Как да групирам по непрекъснати диапазони