Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
-------------------------------------------------------------------------------- Изложу суть дела. Допустим у меня есть таблица MyTable, в которой содержится 20 записей. При запуске след комманды, пройзойдет установка поля Type=2 UPDATE MyTable SET Type=2 Если мы поставим тригер на обновление MyTable, тогда на его входе при этой команде будет таблица Inserted, содержащая 20 записей. Но проблема состоит в том, что тригер расчитан на позаписное обновление (может работать только с одной записью. Что делать ?? Варианты: 1) Я думаю, что должна быть какая-то опция, которая бы заставила данный тригер срабатывать 20 раз, обрабатывая каждый раз только одну запись. Но где эта опция, Что это за опция ??? 2) Запретить на входе тригера обновление нескольких записей, а при обновления нескольких использовать курсор. Это не самое элегантное рещение, хотя для меня единственное. Есть еще предложение уважаемые знатоки MS SQL2000 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 07:12 |
|
||
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
Одна команда INSERT/UPDATE/DELETE - одно срабатывание соответствующего триггера(ов), независимо от количества обработанных записей. Никакие установки это не поменяют Не совсем понятно, что значит "тригер расчитан на позаписное обновление (может работать только с одной записью". Кем/чем "рассчитан" ? "Может работать с одной записью" - это проверка у вас на количество записей в inserted/deleted ? Что вы собственно хотите выполнять в триггере? IMHO если в таблице есть первичный ключ, то в inserted/deleted есть все данные для осуществления "правильных" действий триггера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 07:33 |
|
||
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
На входе триггера: IF @@ROWCOUNT = 0 RETURN -- Если 0 записей - выход IF @@ROWCOUNT = 1 BEGIN -- Обработка одной записи END ELSE BEGIN -- Обработка нескольких записей END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 12:13 |
|
||
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
2 Владимир Смирнов А зачем? триггер корректно работающий с набором, будет так же корректно работать с набором записей, даже если в этом наборе только одна запись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 12:25 |
|
||
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
Опции такой точно нет. В триггере делаете цикл по записям в таблице inserted - лучшего способа я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2001, 15:19 |
|
||
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
2 Genady. Конечно, триггер корректно работающий с любым количеством записей, будет так же корректно работать и с одной записью (это так по определению). Но! Вопрос начался с того, что уже существует триггер, корректно работающий с одной записью. Очевидно для обработки более одной записи потребуется существенно более сложная (и скорее всего более медленно работающая) логика. Варианты решения: 1 - запретить изменение более одной записи, и для этого на входе проверять @@ROWCOUNT, 2 - переделать триггер так, чтобы он корректно обрабатывал более одной записи. Но. Если на 1 транзакцию, изменяющую несколько записей приходится 100 000 однозаписевых транзакций, то для оптимизации имеет смысл в триггере реализовать два пути выполнения: по одной записи и по нескольким записям (а тем более что в данном случае первый путь уже есть). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2001, 10:09 |
|
||
|
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
|
|||
|---|---|---|---|
|
#18+
2 Владимир Смирнов Очевидно для обработки более одной записи потребуется существенно более сложная (и скорее всего более медленно работающая) логика. И поэтому добавим в триггер лишнюю проверку, по моему лучше сразу писать правильно триггер А если уж надо проверять построчно (интересно зачем), то делать это курсором, либо запретить множественное обновление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2001, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32016077&tid=1825186]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 325ms |

| 0 / 0 |
