Uma maneira de conseguir isso é simplesmente escrever o que "OU exclusivo" realmente significa:
CHECK (
(FK1 IS NOT NULL AND FK2 IS NULL)
OR (FK1 IS NULL AND FK2 IS NOT NULL)
)
No entanto, se você tiver muitos FKs, o método acima pode se tornar rapidamente complicado, caso em que você pode fazer algo assim:
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)
...
)
)
Aliás, existem usos legítimos para esse padrão, por exemplo este (embora não aplicável ao MS SQL Server devido à falta de restrições diferidas). Se é legítimo no seu caso específico, não posso julgar com base nas informações que você forneceu até agora.