Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизТригеры в MSSQL 2000 Найти похожие ветки
← →
Маленький мук (2005-09-23 11:47) [0]Помогите дураку! В FireBird есть простая и удобная конструкция - изменить в тригере значение вставляемого или изменяемого поля, если оно неверно
CREATE TRIGGER j_pu_BU0 FOR j_pu
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
if (new.pu1_plan is null) then new.pu1_plan=0;
end
как анаогичное я могу сделать в SQL2000 ?
CREATE TRIGGER [j_pu_bu] ON dbo.j_pu
FOR UPDATE
AS
declare @pu_plan float
select @pu_plan=pu1_plan from inserted
--if (@pu_plan is null) then
-- inserted.pu1_plan=0
update INSERTED set pu1_plan=0 -- тоже ругается :(
← →
ANB © (2005-09-23 11:51) [1]В ФБ и оракле триггеры срабатывают на каждую строку изменяемых данных. А в мс скл в триггер приезжают сразу все строки в виде НД, т.е. inserted.pu1_plan явно некорректно. А вот по поводу update - надо смотреть в BOL.
← →
Val © (2005-09-23 11:53) [2]>ANB © (23.09.05 11:51)
что насчет statement triggers? :)
← →
ANB © (2005-09-23 11:59) [3]
> Val © (23.09.05 11:53) [2]
- а в операторных триггерах в оракле изменяемые строки сами вообще никак не приезжают.
ЗЫ. - а к чему вопрос то ?
← →
Маленький мук (2005-09-23 12:00) [4]И всё таки?? вопрос вполне конкретный... неужели только на клиенте такие проверки делать??
← →
Маленький мук (2005-09-23 12:04) [5]Люди! вы увлеклись! напишите мне как значения обнулять :))
← →
Bless © (2005-09-23 12:12) [6]
> Маленький мук (23.09.05 12:04) [5]
>
> Люди! вы увлеклись! напишите мне как значения обнулять :
> ))
Имхо, никак. Модификация таблиц inserted, deleted в триггерах запрещена.
Если тебе нужно чтоб в поле pu1_plan никогда не было NULL, поставь
в свойствах этого поля таблицы значение по умолчание = 0 и запрети null-значения для этого поля.
← →
Bless © (2005-09-23 12:13) [7]Соврал, сейчас исправлюсь :) (хотя предложенный мной вариант имхо лучше)
← →
Bless © (2005-09-23 12:29) [8]Соврал, сказав "никак".
Я не знаю, как называется ключевое поле у таблицы j_pu, поэтому допущу, что оно называется nz.CREATE TRIGGER [j_pu_bu] ON dbo.j_pu
FOR UPDATE
AS
update j_pu
SET pu_plan=ISNULL(pu_plan) WHERE nz IN (SELECT nz FROM inserted)
Хоть и не нравится мне это очень, но вроде бы (после беглой проверки на тестовом примере) работает.
← →
Stanislav © (2005-09-23 12:45) [9]Если нужно заменить значение делается так:
Вместо FOR UPDATE
INSTEAD OF UPDATE
(ЭТО означает вместо) а дальше тебе нужно повести UPDATE с учетом изменений.
← →
Маленький мук (2005-09-23 12:52) [10]так... ёлки-палки! тригеры то оказывется срабатывают ПОСЛЕ вставки......
я то думал - что сработают ДО ! Ну... в принципе - если полю допустить , что оно может иметь значение NULL - то всё работает, обнуляется..
← →
Stanislav © (2005-09-23 12:55) [11]INSTEAD OF UPDATE - ДО!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.05 c