none
Как создать колонку с полем в котором есть ограниченый выбор [list]. RRS feed

  • Вопрос

  • Добрый день,

    Есть колонка в которой каждому полю может быть присвоено только 2 значения (заранее известных). С помощью чего можно это сделать в SQLServer? Создавать отдельную таблицу и делать ключ? Или есть более эфективный способ?

    Заранее благодарен.
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 0:23 MSDN Forums consolidation (От:SQL Server для разработчиков)
    24 февраля 2010 г. 15:00

Ответы

  • Зависит от требований по работе с данными впоследствии. Вариантов много. Можно навесить CHECK CONSTRAINT и ограничить текст поля только 2-мя значениями. Можно просто использовать битовое поле. Можно INSTEAD OF INSERT триггер (не рекомендую).

    • Помечено в качестве ответа EgoZa 24 февраля 2010 г. 18:01
    • Снята пометка об ответе EgoZa 24 февраля 2010 г. 20:49
    • Помечено в качестве ответа EgoZa 24 февраля 2010 г. 20:49
    24 февраля 2010 г. 15:56

Все ответы

  • Зависит от требований по работе с данными впоследствии. Вариантов много. Можно навесить CHECK CONSTRAINT и ограничить текст поля только 2-мя значениями. Можно просто использовать битовое поле. Можно INSTEAD OF INSERT триггер (не рекомендую).

    • Помечено в качестве ответа EgoZa 24 февраля 2010 г. 18:01
    • Снята пометка об ответе EgoZa 24 февраля 2010 г. 20:49
    • Помечено в качестве ответа EgoZa 24 февраля 2010 г. 20:49
    24 февраля 2010 г. 15:56
  • К сожалению сам не смог задать условие :(

    ADD CONSTRAINT CHK_ColumnA CHECK (ColumnA is NULL or ColumnA='StringOne'or ColumnA='StringTwo');

    На это выдается ошибка:

    The ALTER TABLE statement conflicted with the CHECK constraint "CHK_ColumnA". The conflict occurred in database "dbMyDB", table "dbo.tblMyTbl", column 'ColumnA'.

     

    Что делаю не так?

     

    25 февраля 2010 г. 9:49
  • Странное сообщение об ошибке, как по мне. Возможно это из-за того, что данные в таблице не удовлетворяют условию констрэйнта. Проверьте что все записи соотвествуют условию. Как вариант можете добавить констрэйнт с условием WITH NOCHECK, тогда текущие записи проверяться не будут, а новые будут подвергаться проверке.

    25 февраля 2010 г. 20:01