Всем доброго дня!
Помогите, пожалуйста, разобраться с триггером ms sql. Триггер на update таблицы.
Таблица содержит некое поле Status_id, в нее поступают данные и в момент записи Status_id = 2, мне нужно чтобы он был изменен на 3 и при этом была отработана процедура.
В результате получается, что если триггер срабатывает 2 раза (логично - момент записи-обновления дынных (через update) и после update прописанного в нем, но как мне казалось во время второго выполнения Status_id должен быть равен 3. Но судя по тому, что процедура все равно отрабатывает второй раз - он равен 2, хотя по запросу к таблице он будет уже 3, т.к. update status_id уже отработал.
Ниже полный код триггера с комментариями:
CREATE TRIGGER [Upeco Чек-Лист].CreateTask
ON [Upeco Чек-Лист].[ProjectForms_600]
AFTER UPDATE
AS
begin
declare @Id int, @Pid int, @UserId int, @DateCreate datetime,
@C1 int, @C2 int=0, @TaskName nvarchar(max), @TaskSubject nvarchar(max),
@UserUn uniqueidentifier, @DateEnd datetime, @DateBegin datetime, @Img nvarchar(max),
@Status_Id int, @Del int
select @Id=Id, @Pid=[BaseItem_id], @UserId=[Merchandiser_Id], @DateCreate=ISNULL(DateUpdated,DateCreated), @Status_Id=[Status_Id], @Del=isnull([Deleted],0)
from inserted
--ниже предположил, что inserted после update для status_id содержит 2 записи и по этому условие на выборку максимальной
where [Status_Id]=(select max([Status_Id]) from inserted)
select @UserUn = [UserId] from [dbo].[aspnet_UsersData] WITH (NOLOCK) where Id = @UserId
--условие для срабатывания запросов ниже:
IF @Del=0 and @Status_Id=2
begin
select @Img = coalesce(@Img, '<br />') + '<img style="width:400px;" alt="" src="..\..\' + [FileName] + '" /><br /><br />'
from [Application].[FormFieldsDataContent]
where [FormId]=@Id and [FormFieldsDataId]=1388
IF len(@Img)>15
begin
set @DateBegin = GETDATE() + 1
set @DateEnd = GETDATE() + 4
select @TaskName = ISNULL(Poi.Сеть,'') + ', ' + ISNULL(Poi.Область,'') + ', ' + ISNULL(Poi.Город,'') + ', ' + ISNULL(Poi.Адрес,''),
@TaskSubject = coalesce(@TaskSubject + '<br/><br/>', '') + 'Бренд: ' + ISNULL(B.Наименование,'') + ' <br/> Проблема: ' + ISNULL(P.[Описание проблемы],'') + ' <br/> Задача: ' + ISNULL(Z.[Описание проблемы],'')
from [Upeco Чек-Лист].[Список задач на следующий визит_605] Z inner join
[Upeco Чек-Лист].ProjectForms_600 PF on Z.Form_id=PF.Id inner join
GlobalList.Адреска_593 Poi on PF.BaseItem_id=Poi.Id inner join
GlobalList.[Список проблем_603] P on Z.Задача=P.Id left outer join
GlobalList.Бренды_629 B on Z.Бренд=B.Id
where Z.Form_id=@Id
IF len(@TaskSubject)>0
begin
set @TaskSubject = '<p>' + @TaskSubject + '</p>' + @Img
exec [Application].[ProjectTasksAdd]
@ProjectId=63,
@TaskName=@TaskName,
@UserCreate=@UserUn,
@TaskSubject=@TaskSubject,
@DateBegin=@DateBegin,
@DateEnd=@DateEnd,
@Points=@Pid
end
end
--Обновляем Status_id на 3
update [Upeco Чек-Лист].[ProjectForms_600] set [Status_Id]=3, DateUpdated=GETDATE() where id=@Id
end
end