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.