Един от начините да го постигнете е просто да напишете какво всъщност означава „изключително ИЛИ“:
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 поради липсата на отложени ограничения). Дали е законно във вашия конкретен случай, не мога да преценя въз основа на информацията, която предоставихте досега.