Una forma de lograrlo es simplemente escribir lo que realmente significa "OR exclusivo":
CHECK (
(FK1 IS NOT NULL AND FK2 IS NULL)
OR (FK1 IS NULL AND FK2 IS NOT NULL)
)
Sin embargo, si tiene muchos FK, el método anterior puede volverse difícil de manejar rápidamente, en cuyo caso puede hacer algo como esto:
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)
...
)
)
Por cierto, hay usos legítimos para ese patrón, por ejemplo este (aunque no aplicable a MS SQL Server debido a la falta de restricciones diferidas). Si es legítimo en su caso particular, no puedo juzgar en base a la información que proporcionó hasta ahora.