Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.051 c
9-1119506891
vintik
2005-06-23 10:08
2005.11.06
OpenGl буфер трафарета


14-1129636090
dreamse
2005-10-18 15:48
2005.11.06
Срочно ! Нужна утилита для определания информации о процесе


3-1127387537
Leshiy
2005-09-22 15:12
2005.11.06
Проблема использования SUM() в запросе.


10-1106911438
Sancho
2005-01-28 14:23
2005.11.06
Как дебагить сервер приложений


14-1129217046
ArtemESC
2005-10-13 19:24
2005.11.06
Дизассемблер-редактор





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский