Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824

Триггер after delete

15.06.2013, 01:01. Показов 4226. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

Написал триггер after delete. Он будет работать, только если мы удаляем построчно или при массовом удалении тоже будет работать?

Поясню. Мне нужно удалить товары по заказу. В этой таблице есть поля GoodID и OrderID. Например, хочу удалить записи у которых OrderID = 1 и GoodID 1 2 и 3.

а ) построчно
Выберем всё, что нужно удалить:
SQL
1
SELECT GoodID FROM OrdersGoods WHERE OrderID = 1
Этот запрос вернет, например, 1 2 3.

Затем в нужной мне программе в цикле выполним запросы и на место :id подставим 1 2 и 3.
SQL
1
DELETE FROM OrdersGoods WHERE GoodID = :id
б) массово
SQL
1
DELETE FROM OrdersGoods WHERE OrderID = 1
Я делаю построчно, так как боюсь, что не будет работать триггер при массовом удалении. Вопрос. Будет работать в обоих случаях или только в первом?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.06.2013, 01:01
Ответы с готовыми решениями:

Триггер DELETE
Здравствуйте! Задача звучит следующим образом (работаю с AdventureWorks): Имеется таблица JobCandidate и JobCandidateHistory. Необходимо...

Триггер AFTER DELETE
IF OBJECT_ID ('deleteClient') IS NOT NULL ...

Instead of delete триггер
Есть таблица Hardware с первичным ключом IDHardware и таблица Orders с внешними ключами IDHardware1, IDHardware2, IDHardware3. Для таблицы...

9
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
15.06.2013, 09:43
Триггер срабатывает на инструкцию. Один раз, вне зависимости от числа строк этой инструкцией затронутых.
А вот будет ли триггер работать корректно для одной или многих строк, уже зависит от того, как оный триггер написан.
1
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
15.06.2013, 09:47  [ТС]
invm
SQL
1
2
3
4
5
ALTER TRIGGER [dbo].[delete_trigger_ogs]
ON [dbo].[OrdersGoodsSup] 
AFTER DELETE
AS
UPDATE SuppliersGoods SET COUNT = COUNT + (SELECT COUNT FROM deleted) WHERE ID = (SELECT GoodID FROM deleted)
как оный написан? как учитывать это? хотелось бы понятное дело удалить все сразу и чтобы это было правильно обработано. лишние строки в коде не нужны, а показанные знания по триггерам пойдут на пользу.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
15.06.2013, 09:57
Цитата Сообщение от VladSharikov Посмотреть сообщение
как оный написан?
Криво написан. Вот это
T-SQL
1
WHERE ID = (SELECT GoodID FROM deleted)
предполагает наличие в deleted одной строки, а при "массосвом" там будет много строк.
1
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
15.06.2013, 19:34  [ТС]
invm, как учесть эти "много строк"? если бы я знал, я бы не спрашивал знал или знал хотя бы в какую сторону думать
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
15.06.2013, 20:46
T-SQL
1
2
3
4
5
6
update s
 set
  [COUNT] = s.[COUNT] + d.[COUNT]
from
 deleted d join
 SuppliersGoods s on s.ID = d.GoodID;
1
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
03.08.2013, 17:56  [ТС]
invm, уже второй раз эту конструкцию использую. в первый раз торопился - не задумывался. сейчас есть время. не могли бы вы пояснить как она работает?
я всегда конструкцию update использовал так:
SQL
1
UPDATE t SET f1 = x, f2 = y, f3 = z WHERE t.id = xx
так - понятно, что делается. а вашу не понимаю. можете пояснить?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
03.08.2013, 21:51
VladSharikov, это обновление таблицы данными из других таблиц. Для простоты, можете считать, что это результат select, который можно обновлять.
0
1313 / 945 / 144
Регистрация: 17.01.2013
Сообщений: 2,348
04.08.2013, 07:41
подготовил вариантик, потренировался http://sqlfiddle.com/#!6/03adc/1

Добавлено через 9 минут
Автоматический переход на sqlfiddle почему-то не срабатывает... Копипаст адреса, плз)
0
 Аватар для VladSharikov
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
04.08.2013, 23:52  [ТС]
invm, ага. понял. спасибо большое.
cygapb-007, темой наверное ошиблись? =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2013, 23:52
Помогаю со студенческими работами здесь

Триггер DELETE
Здравствуйте, Задача звучит следующим образом Имеется таблица RKniga и RArhiv. Необходимо создать триггер AvtoPerenos, который должен...

Триггер DELETE
Пытаюсь создать триггер на событие DELETE в таблице Titleauthor, который удаляет соответствующие записи в таблицах Authors и Titles. ...

Не работает триггер after delete
/*Удаляю все пациентов, которые не оплатили лечение */ create trigger client_money_delete1 on Прием after delete as if (exists...

Триггер insert delete
помогите допилить триггер, начал только изучать sql, как сделать что бы он сработал еще на удаление! при удалении срабатывает на первом...

Триггер delete, фиксирование каждой записи
Написал триггер, который записывает все удаления в таблице в отдельную таблицу. create trigger . on . after delete as begin ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru