WATCOM "for each row" in T-SQL?
4 отговора
132 прегледа
WATCOM "for each row" in T-SQL?
Как да направя тригер на ниво row за мсде?
Т.е. като направиш delete from table1 where table1_id > 3 и изтрие 5 записа да изстреля delete trigger-a 5 пъти, вместо 1?
ПС: същото и за update и insert....
-------------
Special killer double trouble triple extra nicotine monster!
Т.е. като направиш delete from table1 where table1_id > 3 и изтрие 5 записа да изстреля delete trigger-a 5 пъти, вместо 1?
ПС: същото и за update и insert....
-------------
Special killer double trouble triple extra nicotine monster!
Редактирано от z_free на
Re: WATCOM "for each row" in T-SQL?
Неможеш - тригера ще си се извика 1 път и ще можеш да видиш кои редове са изтрити в deleted таблицата... Защо би искал да се извика 5 пъти?
Ако искаш да обходиш записите които се изтриват един по един, можеш да го направиш с курсор (DECLARE CURSOR...).
Епа, това е моето хоби... [линк]
Ако искаш да обходиш записите които се изтриват един по един, можеш да го направиш с курсор (DECLARE CURSOR...).
Епа, това е моето хоби... [линк]
Ето
Така е, но това с деклариране на курсор прекалено много усложнява заявката.
А искам да се вика 5 пъти, когато например имам заявка от рода на
select @myvar = (select n from deleted(или inserted))
i posle pravq neshto s myvar, но ако съм забърсал няколко записа на веднъж горното ще доведе до грешка, понеже select n from deleted връща повече от една стойност.
В Watcom диалект за SyBase това се прави с "for each row" в декларацията на тригера.
-------------
Special killer double trouble triple extra nicotine monster!
А искам да се вика 5 пъти, когато например имам заявка от рода на
select @myvar = (select n from deleted(или inserted))
i posle pravq neshto s myvar, но ако съм забърсал няколко записа на веднъж горното ще доведе до грешка, понеже select n from deleted връща повече от една стойност.
В Watcom диалект за SyBase това се прави с "for each row" в декларацията на тригера.
-------------
Special killer double trouble triple extra nicotine monster!
Редактирано от z_free на
Re: Ето
Аз мисля че ако се вика 5 пъти тригера, това ще отнеме повече време на сървъра, отколкото ако се вика веднъж и обходиш 5 записа с курсор...
Епа, това е моето хоби... [линк]
Епа, това е моето хоби... [линк]
Много ясно, ама това не е решение на проблема
а на мен ми трябва такова. Разбира се, че ще отнема време, но ако искам при всеки въведен запис да въвеждам примерно два кореспондиращи записа в друга таблица, и после реша да импортирам данни в първата таблица със селект стейтмънт от друга таблица, тригерът, който ще сработи за инсерт на един запис ще хвърли грешка.
Това е проблема,
-------------
Special killer double trouble triple extra nicotine monster!
Това е проблема,
-------------
Special killer double trouble triple extra nicotine monster!