Проверочное ограничение для столбца флага

Базой данных является MS SQLServer

Пример данных:

| Name | defaultValue |  value   |
| one  |     true     | valone   |
| one  |     false    | valtwo   |
| one  |     false    | valthree |

Я после способа ограничить таблицу, таким образом, что каждое 'Имя' может только поссориться с набором 'defaultValue' к истинному

1
задан Oded 27 July 2010 в 09:28
поделиться

3 ответа

Вы можете использовать TRIGGER для проверки этого ограничения на события обновления или вставки и отката транзакции, если она была недопустимой.

0
ответ дан 2 September 2019 в 22:42
поделиться

Мне понравилась идея Майкла, но она допускает только одно ложное значение для каждого имени в SQL Server. Чтобы избежать этого, как насчет использования

  ALTER TABLE yourtable
  ADD [ValueCheck] AS 
     (case [defaultValue] when (1) then ('~Default#?@') /*Magic string!*/
                 else value  end) persisted

, а затем добавления уникального ограничения для (Name, ValueCheck).

Я предполагаю, что комбинации имени и значения будут уникальными. Если столбец значений не допускает значений NULL, то предпочтительнее использовать NULL , а не магическую строку, в противном случае выберите строку, которая не может отображаться в данных (например, длина 101 символ, если столбец значений допускает только 100 символов)

1
ответ дан 2 September 2019 в 22:42
поделиться

Создайте вычисляемый столбец, подобный этому:

  ALTER TABLE yourtable
  ADD ValueCheck AS CASE defaultValue
     WHEN true THEN 1
     WHEN false THEN NULL
  END

, а затем добавьте уникальное ограничение для (Name, ValueCheck)

1
ответ дан 2 September 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: