Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tambahkan Batasan SQL XOR antara dua FK yang dapat dibatalkan

Salah satu cara untuk mencapainya adalah dengan menuliskan apa arti sebenarnya dari "eksklusif ATAU":

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

Namun, jika Anda memiliki banyak FK, metode di atas dapat dengan cepat menjadi berat, dalam hal ini Anda dapat melakukan sesuatu seperti ini:

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, ada penggunaan yang sah untuk pola itu, misalnya yang ini (walaupun tidak berlaku untuk MS SQL Server karena kurangnya batasan yang ditangguhkan). Apakah itu sah dalam kasus khusus Anda, saya tidak dapat menilai berdasarkan informasi yang Anda berikan sejauh ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - Bagaimana Cara Memberikan Akses Baca ke SEMUA database ke Login?

  2. Tambahkan emoji / emotikon ke tabel SQL Server

  3. Perbaiki Msg 512 "Subquery mengembalikan lebih dari 1 nilai" di SQL Server

  4. String Koneksi DB di Web.config untuk menggunakan database .mdf terlampir tidak akan berfungsi

  5. Saya ingin menyembunyikan skrip prosedur tersimpan di SQL Server 2008