![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тригеры в MSSQL 2000 [D7, MSSQL]
Маленький мук © (2005-09-23 11:47:00)Помогите дураку! В 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 -- тоже ругается :(
Stanislav (2005-09-23 12:55:00) [1]INSTEAD OF UPDATE - ДО!
Маленький мук (2005-09-23 12:52:00) [2]так... ёлки-палки! тригеры то оказывется срабатывают ПОСЛЕ вставки......
я то думал - что сработают ДО ! Ну... в принципе - если полю допустить , что оно может иметь значение NULL - то всё работает, обнуляется..
Stanislav (2005-09-23 12:45:00) [3]Если нужно заменить значение делается так:
Вместо FOR UPDATE
INSTEAD OF UPDATE
(ЭТО означает вместо) а дальше тебе нужно повести UPDATE с учетом изменений.
Bless (2005-09-23 12:29:00) [4]Соврал, сказав "никак".
Я не знаю, как называется ключевое поле у таблицы 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)
Хоть и не нравится мне это очень, но вроде бы (после беглой проверки на тестовом примере) работает.
Bless (2005-09-23 12:13:00) [5]Соврал, сейчас исправлюсь :) (хотя предложенный мной вариант имхо лучше)
Bless (2005-09-23 12:12:00) [6]
> Маленький мук (23.09.05 12:04) [5]
>
> Люди! вы увлеклись! напишите мне как значения обнулять :
> ))
Имхо, никак. Модификация таблиц inserted, deleted в триггерах запрещена.
Если тебе нужно чтоб в поле pu1_plan никогда не было NULL, поставь
в свойствах этого поля таблицы значение по умолчание = 0 и запрети null-значения для этого поля.
Маленький мук (2005-09-23 12:04:00) [7]Люди! вы увлеклись! напишите мне как значения обнулять :))
Маленький мук (2005-09-23 12:00:00) [8]И всё таки?? вопрос вполне конкретный... неужели только на клиенте такие проверки делать??
ANB (2005-09-23 11:59:00) [9]
> Val © (23.09.05 11:53) [2]
- а в операторных триггерах в оракле изменяемые строки сами вообще никак не приезжают.
ЗЫ. - а к чему вопрос то ?
Val (2005-09-23 11:53:00) [10]>ANB © (23.09.05 11:51)
что насчет statement triggers? :)
ANB (2005-09-23 11:51:00) [11]В ФБ и оракле триггеры срабатывают на каждую строку изменяемых данных. А в мс скл в триггер приезжают сразу все строки в виде НД, т.е. inserted.pu1_plan явно некорректно. А вот по поводу update - надо смотреть в BOL.