powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по TRIGGER FOR UPDATE
17 сообщений из 17, страница 1 из 1
Вопрос по TRIGGER FOR UPDATE
    #32009235
_Zar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый !

Как при обновлении столбца FIELD1 в строке c ID=1 , изменить другой столбец FIELD2 в строке c ID=3,
испоьлзуя trigger ?
Срабатываетт ли триггер отдельно по каждой обновляемой строке или
сразу для всех обновляемых строк ?
T.е. каким образом узнать, какая строка обновляется ?
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009237
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то хелп придумали не просто так - его читать иногда надо. Почитайте в про триггера вообще и про таблицы inserted и deleted.
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009243
_Zar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 GreenSurprice
Вообще то, если отвечать на вопросы , то их тоже желательно перед ответом внимательно читать

Речь идет об update , a не процессе вставки и удаления .
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009250
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы в курсе, что в MS SQL триггер на update работает с двумя таблицами - inserted и deleted ? А таблицы updated или ей подобной не существует ?
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009257
_Zar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 GreenSunrise : Огромные извинения за невнимательность . Действительно , таблицы inserted и deleted
хранят также и updated rows , что никак не мог допустить, исходя из их названия .
Еще раз sorry .
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009262
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает
Когда мне пришлось с Oracle и Interbase переходить на MSSQL, то организация триггеров мне показалась просто дикой. И сейчас это ощущение иногда возвращается...
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009280
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В версии 6.5, если обновляешь несколько строк, и условия проверки не проходят хотя бы для одной, то записи не обновляются. Триггер срабатывает для каждой строки. В твоем случае
if update(field1)
update field2
set ...
where ...
проверять желательно, какое поле обновляется.
не согласен с GreenSunrise, все очень логично организованно, может поделишься где дикость исходя из своего опыта? .
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009281
Фотография Deosfen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не дописал ..., какая именно в таблице inserted
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009303
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Deosfen >не согласен с GreenSunrise, все очень логично организованно, может поделишься где дикость исходя из своего опыта?
Я как раз согласен с GreenSunrise, когда нет в принципе триггера на Before Insert, непонятно почему даже в 2000, то псле работы на Oracle и IB первое время просто очень нехорошие слова приходят на ум. И когда приходится на update проверять, а все ли так, и потом чего не нужно удалять или изменять, всместо того, чтобы сначала проверить, а потом записать, это знаете ли ......
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009323
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, куда заносится время, когда запись менялась.

Пока все. Ежели что вспомню, допишу... Правда, Оракл забываться стал - давненько мы не брали в руки шашек
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009325
_Zar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я обновляю в одном запросе 10 записей , все эти 10 записей помещаются в inserted , триггер срабатывает
10 раз (для каждой строки отдельно) . При каждом срабатывании триггера имею доступ к 10-ти строкам таблицы inserted .
Получается так , что определить ID строки , по которой в данный момент срабатывает триггер невозможно ?
А если писать курсор по таблице inserted , так это он 10-ть раз прокручиваться будет ?

To GreenSunrise : , пожалуйста , скажите как в 2000 это обойти ?
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009327
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2_Zar_
"Если я обновляю в одном запросе 10 записей , все эти 10 записей помещаются в inserted , триггер срабатывает
10 раз (для каждой строки отдельно) . При каждом срабатывании триггера имею доступ к 10-ти строкам таблицы inserted ."

А почему вы решили, что для одной команды UPDATE, которая затрагивает 10 записей триггер сработает тоже 10 раз !!! В том-то и дело что 1 раз.
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009331
Alexander Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если я обновляю в одном запросе 10 записей , все эти 10 записей помещаются в inserted , триггер срабатывает
10 раз (для каждой строки отдельно) .
------------------------------------------------

Полный бред - если Вы их изменяете одним запросом - триггер сработает только один раз. Все 10 записей, конечно же, будут помещены в inserted.

Хм - а Вы так уверенно всегда пишете? Я имею в виду, что сами-то Вы этого на практике не проверяли (поскольку это не работает) - может если не знаешь, то лучше промолчать и не вводить человека в заблуждение?
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009334
_Zar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда это упрощает ситуацию . Просто я вероятно неправильно воспринял
один из ответов в этом топике .
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009336
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MSSQL нет триггеров уровня строки, только для операции целиком.
Если написать update mytable set ... where ... , где условие where затрагивает несколько строк, то триггер on update сработает ОДИН раз и в таблицы inserted и deleted будут помещены те строки, которые обновлялись. С ними работа почти как с обычными таблицами - можно select'ы делать, можно курсоры и т.д.
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009369
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточнение. Триггер в MS SQL Server срабатывает на факт вызова команды INSERT/DELETE/UPDATE по соответствующей таблице вне зависимости, сколько записей эта команда затрагивает, даже в том случае, если команда не затрагивает ни одной записи . Последний факт особо важно понимать при разработке рекурсивных триггеров для корректного построения условия выхода из рекурсии. Условие выход должно проверяться до выдачи команды, даже в этой команде реально не задействуется ни одна строка, иначе возникнет бесконечная рекурсия со всеми прелестями вылетающими из экрана красных кирпичей.
...
Рейтинг: 0 / 0
Вопрос по TRIGGER FOR UPDATE
    #32009429
_Zar_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cпасибо всем за ответы .
А если ввел кого в заблуждение своими категоричными
утверждениями - тогда sorry
.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по TRIGGER FOR UPDATE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]