Примерно так:
ALTER TABLE foo WITH CHECK ADD
CONSTRAINT CK_Foo_reason CHECK (
ColA IS NOT NULL AND ColB IS NULL
OR
ColA IS NULL AND ColB IS NOT NULL
)
Редактировать: после обновления вопроса
Это зависит от того, разрешены ли оба столбца NULL, в этом случае
ColA IS NULL OR ColB IS NULL
Редактировать 2: для 3 столбцов, один из которых должен быть НЕ ПУСТО (101)
Боюсь, умных брюк нет ответа. Я добавил пробелы, чтобы, надеюсь, прояснить ситуацию
ALTER TABLE foo WITH CHECK ADD
CONSTRAINT CK_Foo_reason CHECK (
ColA IS NOT NULL AND ColB IS NULL AND ColC IS NULL
OR
ColA IS NULL AND ColB IS NOT NULL AND ColC IS NULL
OR
ColA IS NULL AND ColB IS NULL AND ColC IS NOT NULL
)