powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запуск процедуры по триггеру.
6 сообщений из 6, страница 1 из 1
Запуск процедуры по триггеру.
    #39863499
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый день.

Уже были темы от меня похожие, но реализовал я процесс через триггер.
1) джоб проверяет, появилась ли новая дата в VIEW vTable_source и если появилась, то вторым шагом должен записывать эту новую дату в таблицу Table_Source, а уже триггер реагирует на новую запись и запускает основную процедуру. Однако, при включенном тригере запись в таблицу table_source новой даты из VIEW vTable_source не происходит и второй шаг джоба падает с ошибкой:Logging Error: The current transaction cannot be committed and cannot support operations that write to the lof file. Roll back the transaction. А при выключенном триггере запись в таблицу table_source из VIEW vTable_source проходит хорошо и джоб отрабатывает нормально. Без ошибок. Возможно вы сможете подсказать, что не верно, и почему при включенному тригере не отрабатывает, а при выключенном отрабатывает.?

ALTER TRIGGER start_restart_process
ON table_source
AFTER INSERT
AS
BEGIN
DECLARE @InDateTime datetime --новая дата в table_source
DECLARE @DateInitial datetime --старая дата в table_target
DECLARE @Datemodify datetime --старая дата в table_target
DECLARE @Enabled int --статус процедуры (работает, не работает)
DECLARE @FindSpid int --поиск Spid процедуры

SELECT @InDateTime = (SELECT MAX(InDateTime) FROM table_target) --находим макс дату в таблице
SELECT @DateInitial = (SELECT MAX(DateInitial) FROM table_destination) -- находим последнюю дату таблице целевой
SELECT @Datemodify = (SELECT MAX(DateModify) FROM table_destination) --находим другую максимальную дату, которая логируется другой столбец и необходима для сравнения.

SELECT @Enabled = (SELECT TOP (1) work_status_id FROM status_table WHERE source_proc = основная_процедура ORDER BY time_log desc) -- Находим статус работы процедуры
SELECT @findspid = (SELECT TOP (1) spid FROM status_table WHERE source_proc = основная_процедура ORDER BY time_log desc)
--находим Spid процедуры.

IF (@Indatetime > @DateInitial AND @Indatetime > @DateModify AND @Enabled = 5) --если в источнике дата больше чем в той таблице с которой я провожу сравнение и процеура работает - то останавливаем процедуру)

BEGIN
EXEC ('KILL '+@find_spid) --останавливаю
EXEC основная_процедура --и запускаю
END

ELSE

IF (@Indatetime > @DateInitial AND @Indatetime > @DateModify AND @Enabled != 5) --а если процедура не работала

EXEC основная_процедура

END
GO
...
Рейтинг: 0 / 0
Запуск процедуры по триггеру.
    #39863504
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осподи! Спаси и сохрани!!!
Откуда этот бред?

ЗЫ. Пора переквалифицироваться в управдомы.
...
Рейтинг: 0 / 0
Запуск процедуры по триггеру.
    #39863570
Gerros
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

какое значение джоб вставляет в поле table_source.spid?
не может так быть, что триггер киляет сессию джоба?
...
Рейтинг: 0 / 0
Запуск процедуры по триггеру.
    #39863581
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaВозможно вы сможете подсказать, что не верно, и почему при включенному тригере не отрабатывает, а при выключенном отрабатывает.?Это не связано.
"Не отрабатывает" - потому что вами запрограммирована такая логика в "шаге 2". Как то этот шаг зависит от наличия записей в table_source.

А запись не вставляется, потому что у вас ошибка в "основная_процедура", и она откатывает вставку.

Впрочем, вы используете какие то свои термины, может, всё совсем не так, джобов нет, или есть, но ошибка в первом шаге, ну и т.д.

PS Килять процедуру - это жесть, конечно. У вас там что, программистов нет, что ли?
...
Рейтинг: 0 / 0
Запуск процедуры по триггеру.
    #39863582
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerrosне может так быть, что триггер киляет сессию джоба?Легко. Он даже обращается к status_table, пытаясь что то там найти, вместо использования inserted
...
Рейтинг: 0 / 0
Запуск процедуры по триггеру.
    #39863648
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все ужасно. Особенно асинхронный kill без ожидания его завершения. В триггере. И все это без синхронизации.

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


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