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

Добавяне на SQL XOR ограничение между два nullable FK

Един от начините да го постигнете е просто да напишете какво всъщност означава „изключително ИЛИ“:

CHECK (
    (FK1 IS NOT NULL AND FK2 IS NULL)
    OR (FK1 IS NULL AND FK2 IS NOT NULL)
)

Ако обаче имате много FK, горният метод може бързо да стане тромав, в който случай можете да направите нещо подобно:

CHECK (
    1 = (
        (CASE WHEN FK1 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK2 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK3 IS NULL THEN 0 ELSE 1 END)
        + (CASE WHEN FK4 IS NULL THEN 0 ELSE 1 END)
        ...
    )
)

BTW, има законни употреби за този модел, например този (макар и неприложимо за MS SQL Server поради липсата на отложени ограничения). Дали е законно във вашия конкретен случай, не мога да преценя въз основа на информацията, която предоставихте досега.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Комбиниране на няколко реда в един ред и добавяне на колоните в зависимост от броя на редовете

  2. Нуждаете се от съвет за проектиране на таблици в SQL-Server

  3. Не могат да се подадат множество стойности в низ на заявка в .aspx за отчитане по време на изпълнение

  4. Бърза помощ при използване на RANK върху множество променливи

  5. t-sql конкатенация на низове