Форум: "Потрепаться";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизFB SQL проблема с изменением данных Найти похожие ветки
← →
Труп Васи Доброго © (2005-11-28 14:26) [0]Привет всем живущим!
Стыдно спрашивать, но чего то я дико торможу.
Простая вроде бы задача: не допустить одновременного появления в одном поле разных записей таблицы более одного определённого значения.
Пример: В таблице есть поле, в котором может быть или 0 или 1, количество записей с нулями не ограничено, а вот единица должна быть только одна. При появлении новой единице на месте старой ставится 0. Вот, собственно и всё.
Я естественно засунул это дело в триггер примерно такого содержания:
CREATE TRIGGER MYTABLE_BIU0 FOR MYTABLE
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
if (new.activ = "1") then
begin
update MYTABLE set MYTABLE.activ="0" where (MYTABLE.activ="1");
end
end
Однако при вставке/изменении происходит ошибка: Too many concurrent executions of the same request.
Как бы это решить?
← →
Труп Васи Доброго © (2005-11-28 14:34) [1]Опаньки.. ещё никто не ответил???
Народ, мне срочно надо.
← →
Дмитрий_Б © (2005-11-28 14:54) [2]А если так:
update MYTABLE set MYTABLE.activ="0" where (MYTABLE.activ="1") and
MYTABLE.id <> new.id
← →
Труп Васи Доброго © (2005-11-28 14:59) [3]Дмитрий_Б © (28.11.05 14:54) [2]
А если так:
Смысла никакого нет, при смене 0 на 0 он вообще должен триггер мимо ушей пропустить!
Хрень какая то! Всё просто обязано работать!
← →
wicked © (2005-11-28 15:03) [4]
> Простая вроде бы задача: не допустить одновременного появления
> в одном поле разных записей таблицы более одного определённого
> значения.
> Пример: В таблице есть поле, в котором может быть или 0
> или 1, количество записей с нулями не ограничено, а вот
> единица должна быть только одна. При появлении новой единице
> на месте старой ставится 0. Вот, собственно и всё.
предлагаю пересмотреть логику хранения данных - модель не должна допускать излишеств и аномалий данных....
вот, собственно, и всё....
← →
Sergey13 © (2005-11-28 15:11) [5]2Труп Васи Доброго © (28.11.05 14:26)
Попробуй индекс на это поле повесить.
← →
Труп Васи Доброго © (2005-11-28 15:19) [6]Всем спасибо! Нашёл!
Правильный мой триггер! Просто не надо ничего делать по пьяни! Оказалось что я на выходных уже впендюрил такой же триггер, только на апдейт, вот они и грызлись между собой.
Ну идиот, извиняюсь за беспокойство.
wicked © (28.11.05 15:03) [4]
предлагаю пересмотреть логику хранения данных
От это ты что-то умное зарядил! Куда уж проще и без излишеств - все нули и одна единица!
← →
wicked © (2005-11-28 15:27) [7]> Труп Васи Доброго © (28.11.05 15:19) [6]
> От это ты что-то умное зарядил! Куда уж проще и без излишеств
> - все нули и одна единица!
спорить не буду, так как не знаю ПО.... но даже без этого знания вижу способ получше, чем
> все нули и одна единица
но...... каждый грызет свои кактусы по своему....
← →
КаПиБаРа © (2005-11-29 05:41) [8]Труп Васи Доброго © (28.11.05 15:19) [6]
От это ты что-то умное зарядил! Куда уж проще и без излишеств - все нули и одна единица!
Вариант: хранить в таблице ID активного элемента.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c