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

Dodaj wiązanie SQL XOR między dwoma FK z wartościami null

Jednym ze sposobów, aby to osiągnąć, jest po prostu zapisanie, co właściwie oznacza „wyłączne OR”:

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

Jednakże, jeśli masz wiele FK, powyższa metoda może szybko stać się niewygodna, w takim przypadku możesz zrobić coś takiego:

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)
        ...
    )
)

Przy okazji, istnieją uzasadnione zastosowania tego wzorca, na przykład ten (choć nie dotyczy MS SQL Server ze względu na brak odroczonych ograniczeń). Nie mogę ocenić na podstawie informacji, które do tej pory podałeś, czy jest to uzasadnione w Twoim konkretnym przypadku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywanie dużych plików w bazie danych powoduje wyjątek typu „System.OutOfMemoryException”

  2. Otrzymano nieprawidłową długość kolumny od klienta bcp dla colid 6

  3. pobieranie danych z SQL w VB (część 2)

  4. Jak mogę ręcznie wstawić tożsamość?

  5. Pomoc do zapytań SQL — łączenie wielu kolumn na podstawie warunku