SQL-сервер: определять столбцы как взаимоисключающие - PullRequest
10 голосов
/ 02 декабря 2009

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

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

1 Ответ

14 голосов
/ 02 декабря 2009

Да, вы можете, используя ограничение 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...