Sql Server – Constraint – разрешить установку столбца A только в том случае, если столбец B является нулевым и наоборот

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

пример

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

Что-то вроде этого:

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 столбцов, один из которых должен быть NOT NULL

Я не боюсь, что смутные брюки отвечают. Я добавил места, чтобы, надеюсь, сделать его более ясным

 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 ) 

Казалось, это сработало для меня:

 CREATE TABLE dbo.Test_Constraint ( a INT NULL, b VARCHAR(10) NULL, CONSTRAINT Test_Constraint_CHK CHECK (a IS NULL OR b IS NULL) ) 
  • Как добавить ограничение для удаления в sql
  • Что происходит, когда я удаляю кластерный первичный ключ в SQL 2005
  • Как я могу удалить все ограничения ограничений по умолчанию для таблицы
  • Ограничение проверки TSQL, связанное с существующими строками
  • Поиск всех нулевых столбцов в базе данных SQL 2000
  • Как сделать это ограничение в SQL Server?
  • Ограничение NULL SQL Server
  • SQL-ограничения или условие
  • Запретить строки с одинаковыми col1 и разными col2
  • Как узнать, является ли CONSTRAINT_NAME основным или внешним ключом?
  • Ограничение, которое позволяет только одной из двух таблиц ссылаться на базовую таблицу
  • Interesting Posts

    Как я могу искать значения из инструкции CASE?

    Возврат SqlDataReader

    Заполните дни недели в таблице с предшествующим воскресным значением

    SQL Query для вычисления двух сумм в одной строке

    Использование SQLCMD в SQL Server

    Как получить это условие в том, где статья Sql

    Я хочу проверить, находится ли данная запись в базе данных или нет.

    Вставить данные в динамический столбец, указанный пользователем

    Как найти зависимости внешнего ключа определенной строки?

    Параметры SQL для одиночных букв в верхнем регистре

    Различные планы выполнения при выполнении инструкции напрямую и из хранимой процедуры

    TOP замедляет запрос

    Определенная пользователем функция T-SQL или аналогичная функция для вычисления максимального значения (даты) из списка значений

    Получение возвращаемого значения из хранимой процедуры в C #

    Как обновить значение атрибута xml в переменной xml с помощью t-sql?

    Давайте будем гением компьютера.