Ограничение столбца в SQL

Возможный дубликат:
Ограничение битового столбца SQL Server, 1 строка = 1, все остальные 0

Всем привет,

Скажем, у меня есть таблица с именем TableA, содержащая поле BIT. Есть ли способ заставить только одну строку в таблице быть когда-либо установленной в 1?

Изменить: Пожалуйста, не используйте триггеры!

Большое Вам спасибо.


person Miguel    schedule 03.06.2011    source источник


Ответы (1)


Вы можете использовать CHECK ограничение.

person Oded    schedule 03.06.2011
comment
Судя по вашей ссылке, большинство систем управления базами данных ограничивают ограничения проверки одной строкой. Как бы вы предложили, чтобы ограничение CHECK могло определить, действительно ли значение его столбца, равное 1, не консультируется с другими строками? Например, SQL Server, есть кладжи, использующие UDF, но обычно они не на 100%. - person Damien_The_Unbeliever; 03.06.2011
comment
@Damien_The_Unbeliever - предлагаю вам прочитать дальше: такие ограничения на самом деле не являются ограничениями проверки таблицы, а скорее ограничениями проверки строк. И они существуют в SQL Server должным образом, а не как кладжи UDF: com/en-us/library/ms188258.aspx" rel="nofollow noreferrer">msdn.microsoft.com/en-us/library/ms188258.aspx - person Oded; 03.06.2011
comment
но необходимое ограничение в этом случае должно утверждать правду или иное о состоянии таблицы в целом - что ровно одна строка имеет ColumnX = 1. Это невозможно с ограничением CHECK (по крайней мере, в SQL Server). И решения этой проблемы хорошо известны, поскольку я и Джо ссылались на дубликаты — вы используете индексированное представление или отфильтрованный индекс. - person Damien_The_Unbeliever; 03.06.2011