powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему может не работать триггер на удаление?
11 сообщений из 11, страница 1 из 1
Почему может не работать триггер на удаление?
    #32000587
чайник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не срабатывает триггер на удаление из таблицы, но данные удаляются. В чём может быть причина? (MS SQL Server 2000 Ent, Windows NT4.0 SP6.)
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000594
Фотография judge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть данные удаляются командой
TRUNCATE TABLE ???

в этом случае в лог ничего не пишется и триггер не вызывается.

Успехов, Александр
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000601
чайник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет DELETE FROM. Все уже раз на 10 перетряс. Запись из таблицы удаляется, а в DELETED она не попадает. Почему - хрен поймешь.
Может что-нибудь подскажите:

CREATE TRIGGER [d_out] ON [dbo].[out]
FOR DELETE
AS
DECLARE @c_id INT, @c_id1 TINYINT
BEGIN TRAN
SELECT @c_id = DELETED.id, @c_id1 = DELETED.id1
FROM out o, DELETED
WHERE o.id = DELETED.id
AND o.id1 = DELETED.id1
/*@@rowcount - равен 0 ?????????? */
EXEC p_jurnal @c_id, @c_id1 /* процедура которая не хочет работать в триггере, но просто так работает */
IF (@@error != 0)
BEGIN
ROLLBACK TRAN
RAISERROR ('Произошёл сбой транзакции, попробуйте повторить ещё раз.', 16, -1)
RETURN
END
COMMIT TRAN
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000607
Фотография AnS1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты по одной записи удаляешь, или кучно?
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000608
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если @@ROWCOUNT=0, значимт=0. Если гарантированно Вы удаляете 1 строку, делайте SELECT без WHERE, в противном случае без курсора не обойтись.
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000613
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы убедиться, есть ли что в deleted или нет, проще всего написать в триггере select * from deleted.
А запрос тот может ничего не вернуть, если например id или id1 имеют значение NULL. Чудес то не бывает.

И кстати - транзакцию в триггере объявлять не нужно, триггер и так выполняется внутри транзакции. Сам запрос тоже вызывает вопросы. Точнее вопрос: нахрена связывать 2 таблицы, когда предпологается, что удаляться будет только одна строка? Можно же тогда просто написать:

CREATE TRIGGER d_out ON dbo.out
FOR DELETE
AS
BEGIN
if not exists(select * from deleted) RETURN
DECLARE @c_id INT, @c_id1 TINYINT

SELECT @c_id = id, @c_id1 = id1
FROM DELETED

EXEC p_jurnal @c_id, @c_id1

IF (@@error != 0)
BEGIN
RAISERROR ('Произошёл сбой транзакции, попробуйте повторить ещё раз.', 16, -1)
ROLLBACK TRAN
END

END

С приветом Сергей
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000618
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причина ошибки очевидно в связке
SELECT @c_id = DELETED.id, @c_id1 = DELETED.id1
FROM out o, DELETED
WHERE o.id = DELETED.id
AND o.id1 = DELETED.id1
данные из [out] уже удалены и естественно, rowcount=0
И конечно, срочно выкиньте BEGIN TRAN и COMMIT TRAN: "транзакцию в триггере объявлять не нужно" - это SergSuper сказал очень мягко...
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000629
чайник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AnS1, Fompro, SergSuper, lexeyvg - спасибо за помощь и поддержку.
Запись действительно только одна удаляется... А я то полагал, что это объязательная выборка.

P.S. Встретите такую книгу "Использование SQL Server 7.0" C.Винкоп - используйте ее в качестве туалетной бумаги. :).
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000631
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не работал с SQL Server-2000. Могу прокоментировать текст триггера на основании того, что мне известно об SQL SErver 7.0:
1. Присваивать значения локальным переменным рекомендуется командой SET, а не SELECT.
2. Триггер разработан из предположения, что удаление производится ровно ОДНОЙ записи. Само это предположение в корне не стыкуется с идеологией использования триггеров. Попробуй ответить на вопрос: что должен сделать триггер, если из Query Analyzer выдать команду delete from out БЕЗ фразы where.
3. Часть запроса, в которой указано where o.id = deleted.id НИКОГДА не даст выбрать ни одной записи, поскольку в тот момент, когда происходит выполнение триггера, записи с deleted.id из таблицы out УЖЕ УДАЛЕНЫ - ух там просто нет. Это удаление еще можно откатить, поскольку любая активация триггера выполняется в рамках неявной транзакции.
4. Без внутри триггера добавлять фразу begin tran не стОит. Как я ранее уже заметил, триггер выполняется в рамках неявно запущенной транзакции. Если триггер выполнится до конца и не наткнется на rollbac tran, то все его действия будут зафиксированы. Если в тексте триггера поставить rollback tran, то произойдет откат как самого удаления, так и всех действий, выполненных в триггере ДО этой команды.
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000726
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно еще добавить в дурь от мелкософта.
Убедился в такой кривизне -
если в тригере пишете типа WHERE DELETED.id .....
хрен что работает если не напишу
.......
FROM DELETED d
WHERE d.ID = ......
Вот такая лабуда
с уважением
Тимур
...
Рейтинг: 0 / 0
Почему может не работать триггер на удаление?
    #32000732
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только-что просмотрел несколько триггеров - везде написано where deleted.id = .... - и всё работает. Можете прислать текст триггера?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему может не работать триггер на удаление?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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