Sql Server - Constraint - разрешить установку столбца A только в том случае, если столбец B равен нулю, и наоборот - PullRequest
3 голосов
/ 14 июля 2010

Есть ли способ добавить ограничение в SQL Server 2008, которое будет проверять, что если пользователь пытается ввести значение в столбце A, это возможно только в том случае, если столбец B равен нулю и наоборот

Пример

  • если A равно NULL, B может иметь значение
  • если B равно NULL, A может иметь значение
  • A и B не могут иметь значения одновременно

Ответы [ 2 ]

6 голосов
/ 14 июля 2010

Примерно так:

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
        )
0 голосов
/ 14 июля 2010

Мне показалось, что это работает:

CREATE TABLE dbo.Test_Constraint
(
    a INT NULL,
    b VARCHAR(10) NULL,
    CONSTRAINT Test_Constraint_CHK CHECK (a IS NULL OR b IS NULL)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...