Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
День добрый ! Как при обновлении столбца FIELD1 в строке c ID=1 , изменить другой столбец FIELD2 в строке c ID=3, испоьлзуя trigger ? Срабатываетт ли триггер отдельно по каждой обновляемой строке или сразу для всех обновляемых строк ? T.е. каким образом узнать, какая строка обновляется ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 10:13 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Вообще-то хелп придумали не просто так - его читать иногда надо. Почитайте в про триггера вообще и про таблицы inserted и deleted. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 10:51 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
2 GreenSurprice Вообще то, если отвечать на вопросы , то их тоже желательно перед ответом внимательно читать Речь идет об update , a не процессе вставки и удаления . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 11:53 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
А Вы в курсе, что в MS SQL триггер на update работает с двумя таблицами - inserted и deleted ? А таблицы updated или ей подобной не существует ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 12:38 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
2 GreenSunrise : Огромные извинения за невнимательность . Действительно , таблицы inserted и deleted хранят также и updated rows , что никак не мог допустить, исходя из их названия . Еще раз sorry . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 13:11 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Бывает Когда мне пришлось с Oracle и Interbase переходить на MSSQL, то организация триггеров мне показалась просто дикой. И сейчас это ощущение иногда возвращается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 13:34 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
В версии 6.5, если обновляешь несколько строк, и условия проверки не проходят хотя бы для одной, то записи не обновляются. Триггер срабатывает для каждой строки. В твоем случае if update(field1) update field2 set ... where ... проверять желательно, какое поле обновляется. не согласен с GreenSunrise, все очень логично организованно, может поделишься где дикость исходя из своего опыта? . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 21:41 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Не дописал ..., какая именно в таблице inserted ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2001, 21:43 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
2 Deosfen >не согласен с GreenSunrise, все очень логично организованно, может поделишься где дикость исходя из своего опыта? Я как раз согласен с GreenSunrise, когда нет в принципе триггера на Before Insert, непонятно почему даже в 2000, то псле работы на Oracle и IB первое время просто очень нехорошие слова приходят на ум. И когда приходится на update проверять, а все ли так, и потом чего не нужно удалять или изменять, всместо того, чтобы сначала проверить, а потом записать, это знаете ли ...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 06:55 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
1. В Оракле есть триггера для уровня строки, а есть для уровня операции в целом. Пример, когда это удобно: выполнить некую stored proc для _каждой_ обновляемой записи. Как это можно сделать в MS SQL, кроме как организовав курсор по таблице inserted ? Да, в 2000 это можно в некоторой степени сымитировать функциями, но это будет _очень_ неудобно, потому что использование многих полезных фич в функциях запрещено по сравнению с процедурами. А до 2000 что было делать ? 2. Разделение триггеров BEFORE/AFTER. Без комментариев. 3. Если я хочу в триггере insert/update вносить изменения в _ту_же_самую_ запись, то приходится писать что-то вроде update mytable set mytable.field1 = <бла-бла> from mytable, inserted where mytable.id = inserted.id По-моему, это маразм. Я хочу просто написать new.field1 = <бла-бла> (синтаксис примерно interbase'овский). Все!!! И не говорите мне, что обновления той же самой записи - дело вредное и ненужное. Типичный случай - поле change_time, куда заносится время, когда запись менялась. Пока все. Ежели что вспомню, допишу... Правда, Оракл забываться стал - давненько мы не брали в руки шашек ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 10:10 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Если я обновляю в одном запросе 10 записей , все эти 10 записей помещаются в inserted , триггер срабатывает 10 раз (для каждой строки отдельно) . При каждом срабатывании триггера имею доступ к 10-ти строкам таблицы inserted . Получается так , что определить ID строки , по которой в данный момент срабатывает триггер невозможно ? А если писать курсор по таблице inserted , так это он 10-ть раз прокручиваться будет ? To GreenSunrise : , пожалуйста , скажите как в 2000 это обойти ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 10:32 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
2_Zar_ "Если я обновляю в одном запросе 10 записей , все эти 10 записей помещаются в inserted , триггер срабатывает 10 раз (для каждой строки отдельно) . При каждом срабатывании триггера имею доступ к 10-ти строкам таблицы inserted ." А почему вы решили, что для одной команды UPDATE, которая затрагивает 10 записей триггер сработает тоже 10 раз !!! В том-то и дело что 1 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 10:56 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Если я обновляю в одном запросе 10 записей , все эти 10 записей помещаются в inserted , триггер срабатывает 10 раз (для каждой строки отдельно) . ------------------------------------------------ Полный бред - если Вы их изменяете одним запросом - триггер сработает только один раз. Все 10 записей, конечно же, будут помещены в inserted. Хм - а Вы так уверенно всегда пишете? Я имею в виду, что сами-то Вы этого на практике не проверяли (поскольку это не работает) - может если не знаешь, то лучше промолчать и не вводить человека в заблуждение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 11:29 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Тогда это упрощает ситуацию . Просто я вероятно неправильно воспринял один из ответов в этом топике . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 11:42 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
В MSSQL нет триггеров уровня строки, только для операции целиком. Если написать update mytable set ... where ... , где условие where затрагивает несколько строк, то триггер on update сработает ОДИН раз и в таблицы inserted и deleted будут помещены те строки, которые обновлялись. С ними работа почти как с обычными таблицами - можно select'ы делать, можно курсоры и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 11:44 |
|
||
|
Вопрос по TRIGGER FOR UPDATE
|
|||
|---|---|---|---|
|
#18+
Уточнение. Триггер в MS SQL Server срабатывает на факт вызова команды INSERT/DELETE/UPDATE по соответствующей таблице вне зависимости, сколько записей эта команда затрагивает, даже в том случае, если команда не затрагивает ни одной записи . Последний факт особо важно понимать при разработке рекурсивных триггеров для корректного построения условия выхода из рекурсии. Условие выход должно проверяться до выдачи команды, даже в этой команде реально не задействуется ни одна строка, иначе возникнет бесконечная рекурсия со всеми прелестями вылетающими из экрана красных кирпичей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2001, 14:35 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1826213]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
8ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 335ms |

| 0 / 0 |
