powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
7 сообщений из 7, страница 1 из 1
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32015968
X-Defender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
--------------------------------------------------------------------------------
Изложу суть дела.
Допустим у меня есть таблица MyTable, в которой содержится 20 записей.
При запуске след комманды, пройзойдет установка поля Type=2

UPDATE MyTable
SET Type=2

Если мы поставим тригер на обновление MyTable, тогда на его входе при этой команде будет таблица Inserted, содержащая 20 записей.
Но проблема состоит в том, что тригер расчитан на позаписное обновление (может работать только с одной записью.

Что делать ??

Варианты:
1) Я думаю, что должна быть какая-то опция, которая бы заставила данный тригер срабатывать 20 раз, обрабатывая каждый раз только одну запись.
Но где эта опция, Что это за опция ???

2) Запретить на входе тригера обновление нескольких записей, а при обновления нескольких использовать курсор. Это не самое элегантное рещение, хотя для меня единственное.

Есть еще предложение уважаемые знатоки MS SQL2000 ?
...
Рейтинг: 0 / 0
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32015971
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна команда INSERT/UPDATE/DELETE - одно срабатывание соответствующего триггера(ов), независимо от количества обработанных записей. Никакие установки это не поменяют

Не совсем понятно, что значит "тригер расчитан на позаписное обновление (может работать только с одной записью". Кем/чем "рассчитан" ? "Может работать с одной записью" - это проверка у вас на количество записей в inserted/deleted ?

Что вы собственно хотите выполнять в триггере?

IMHO если в таблице есть первичный ключ, то в inserted/deleted есть все данные для осуществления "правильных" действий триггера.
...
Рейтинг: 0 / 0
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32016005
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На входе триггера:
IF @@ROWCOUNT = 0 RETURN -- Если 0 записей - выход
IF @@ROWCOUNT = 1
BEGIN
-- Обработка одной записи
END
ELSE
BEGIN
-- Обработка нескольких записей
END
...
Рейтинг: 0 / 0
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32016009
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Смирнов
А зачем? триггер корректно работающий с набором, будет так же корректно работать с набором записей, даже если в этом наборе только одна запись
...
Рейтинг: 0 / 0
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32016026
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опции такой точно нет. В триггере делаете цикл по записям в таблице inserted - лучшего способа я не знаю.
...
Рейтинг: 0 / 0
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32016077
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady.
Конечно, триггер корректно работающий с любым количеством записей, будет так же корректно работать и с одной записью (это так по определению).
Но!
Вопрос начался с того, что уже существует триггер, корректно работающий с одной записью. Очевидно для обработки более одной записи потребуется существенно более сложная (и скорее всего более медленно работающая) логика. Варианты решения: 1 - запретить изменение более одной записи, и для этого на входе проверять @@ROWCOUNT, 2 - переделать триггер так, чтобы он корректно обрабатывал более одной записи.
Но. Если на 1 транзакцию, изменяющую несколько записей приходится 100 000 однозаписевых транзакций, то для оптимизации имеет смысл в триггере реализовать два пути выполнения: по одной записи и по нескольким записям (а тем более что в данном случае первый путь уже есть).
...
Рейтинг: 0 / 0
Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
    #32016081
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Смирнов

Очевидно для обработки более одной записи потребуется существенно более сложная (и скорее всего более медленно работающая) логика.

И поэтому добавим в триггер лишнюю проверку, по моему лучше сразу писать правильно триггер

А если уж надо проверять построчно (интересно зачем), то делать это курсором, либо запретить множественное обновление.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема в тригере при обновлении более чем 1 поля сразу (MSSQL2000)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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