SQL-Server: определение столбцов как взаимоисключающих

шутя с коллегой, я придумал интересный сценарий: возможно ли в SQL Server определить таблицу, чтобы с помощью "стандартных средств" (ограничений и т.д.) я мог убедиться, что два или более столбца являются взаимоисключающими

Под этим я подразумеваю: могу ли я убедиться, что только один из столбцов содержит значение?

Ответ 1

Да, вы можете использовать ограничение CHECK:

ALTER TABLE YourTable
ADD CONSTRAINT ConstraintName CHECK (col1 is null or col2 is null)

В вашем комментарии, если много столбцов являются эксклюзивными, вы можете проверить их следующим образом:

case when col1 is null then 0 else 1 end +
case when col2 is null then 0 else 1 end +
case when col3 is null then 0 else 1 end +
case when col4 is null then 0 else 1 end
= 1

Это говорит о том, что один из четырех столбцов должен содержать значение. Если все они могут быть NULL, просто проверьте <= 1.