Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 триггер на view  [new]
dermama
Member

Откуда:
Сообщений: 226
Коллеги, добрый день.
В первый раз делал триггер.
Идея такая.
на сервере 1 есть view, которая селектит дату из таблицы источника.(у меня к таблице источнику доступа нет и не будет).
Как только новая дата обнаружилась во вьюхе триггер должен запустить ДЖОБ и залогировать эту дату в таблицу на нашем сервере и далее запустить процесс. В случае, если во вьюхе появится еще одна новая дата, то триггер должен остановить джоб и запустить его заного и так до бесконечности пока не перестанут появляться новые даты во вьюхе. Сделано это с целью согласованности данных в БД.

Написал код:

CREATE TRIGGER dbo.check_new_data_and_start_job 
   ON  dbo.vClosedDay_in_source  --вьюха, которая идентифицирует новую дату в источнике
   AFTER INSERT,UPDATE
AS 
BEGIN
	DECLARE @job_id UNIQUEIDENTIFIER --ID джоба, который нужно запускать, останавливать
	DECLARE @InDateTime datetime --новая дата во вьюхе
	DECLARE @DateInitial datetime --старая дата в таблице нашей, куда должна произойти запись новой
	DECLARE @Enabled int -- статус работы джоба 1-работает, 0 - не работает
		
		SET @job_id = (SELECT job_id FROM msdb.dbo.sysjobs
					   WHERE job_id = 'Load_fastclosing')		--определяем ID джоба по названию		   
		SELECT @InDateTime = (SELECT MAX(InDateTime) FROM ourserv.ourbase.dbo.vClosedDay_in_source)	 --определяем новую дату
		SELECT @DateInitial = (SELECT DateInitial FROM ourserv.ourbase.dbo.ClosedDayStatus_source) --определяем старую дату
		SELECT @Enabled = (SELECT enabled FROM msdb.dbo.sysjobs
						   WHERE [name] = 'FastClosing_onClosedDays') -- уточняем статус джоба 

	IF (@InDateTime > @DateInitial AND @Enabled = 1) --сравниваем дату вьюхи и таблицы
		EXEC msdb.dbo.sp_stop_job @job_id = @job_id --если джоб работает останавливаем

		EXEC msdb.dbo.sp_start_job @job_id = @job_id -- и перезапукаем.

	
END
GO

При попытке создать тригер выдает ошибку:

The object 'dbo.vClosedDay_in_source' does not exist or is invalid for this operation

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

Сообщение было отредактировано: 27 авг 19, 14:45
27 авг 19, 14:44    [21958357]     Ответить | Цитировать Сообщить модератору
 Re: триггер на view  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
Памятка для отвечающих: автор рожает велосипеды с треугольными колесами и советы не слушает.

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

Сообщение было отредактировано: 27 авг 19, 14:49
27 авг 19, 14:49    [21958361]     Ответить | Цитировать Сообщить модератору
 Re: триггер на view  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama,

автор
Как только новая дата обнаружилась во вьюхе

это как она так умеет?
27 авг 19, 14:50    [21958363]     Ответить | Цитировать Сообщить модератору
 Re: триггер на view  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7780
dermama,

вроде на прошлой неделе именно такая же темя пролетала.
27 авг 19, 15:14    [21958384]     Ответить | Цитировать Сообщить модератору
 Re: триггер на view  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3712
Владислав Колосов
dermama,

вроде на прошлой неделе именно такая же темя пролетала.


Юзер запустил скрипт еще раз, проверить, может в этот раз сработает
28 авг 19, 12:04    [21958957]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить