Он остановился после публикации на рабочем сервере. Причина, по которой она показала мне эту ошибку, состояла в том, что она была развернута во вложенную папку. В IIS я щелкнул правой кнопкой мыши в подпапке и вычитал «Преобразовать в приложение», после чего он работал.
Используйте функциональный индекс:
create unique index only_one_yes on mytable
(case when col='YES' then 'YES' end);
Oracle только индексирует ключи, которые не являются абсолютно пустыми, и выражение CASE здесь гарантирует, что все значения 'НЕТ' изменяются на пустые указатели и так не индексированные.
Это - топорный взлом, но если столбец позволяет, АННУЛИРУЕТ, то Вы могли использовать ПУСТОЙ УКАЗАТЕЛЬ вместо "НЕТ" и использовать "ДА" так же, как прежде. Примените ограничение уникального ключа к тому столбцу, и Вы никогда не будете добираться два "ДА" значения, но все еще иметь много НОМЕРОВ
Обновление: @Nick Pierpoint: предложенное добавление проверочного ограничения так, чтобы значения столбцов были ограничены просто "ДА" и ПУСТЫМ УКАЗАТЕЛЕМ. Синтаксис все разработан в его ответе.
Это не работает над определением таблицы.
Однако при обновлении таблицы с помощью триггера, называя хранимую процедуру Вы могли бы удостовериться, что только одна строка содержит "ДА".
Вы захотите проверить статью Tom Kyte с точно этим вопросом, который задают и его ответ:
http://tkyte.blogspot.com/2008/05/another-of-day.html
Сводка: не используйте триггеры, не используйте автономные транзакции, используйте две таблицы.
при использовании базы данных Oracle, затем НЕОБХОДИМО узнать AskTom и получить его книги.
Следуя за моим комментарием к предыдущему ответу yukondude, я добавил бы уникальный индекс и проверочное ограничение:
create table mytest (
yesorno varchar2(3 char)
);
create unique index uk_mytest_yesorno on mytest(yesorno);
alter table mytest add constraint ck_mytest_yesorno check (yesorno is null or yesorno = 'YES');
Oracle поддерживает что-то как фильтрованные индексы (на прошлой неделе, я слышал, что, например, MSSQL2008 делает)? Возможно, можно определить уникальный ключ , который применяет только к строкам со значением "Да" в столбце.
Я предполагаю, что использовал бы вторую таблицу для указания на соответствующую строку в текущей таблице. То, что другая таблица могла использоваться для хранения значений других переменных слишком также.