Ниже приводится исходный код шаблона для создания триггера Entity Override Child-Insert для сущности ORDER-LINE. Новый код, используемый для добавления order-quantity к prooduct-sold-quantity, вставляется сразу же после выражения %ForEachChildRel, поскольку сущность ORDER-LINE является дочерней в связи между ORDER-LINE и PRODUCT. Вставляемый код приводится ниже.
сreate trigger %TriggerName on %TableName
for %Actions(',')
as
/* %Actions(',') trigger on %TableName */
/* default body for %TriggerName */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
%PKDecl(,@ins),
@errno int,
@errmsg varchar(255)
select @numrows = @@rowcount
%ForEachChildRel(){
%RelTemplate
}
%ForEachParentRel(){
%RelTemplate
}
return
error:
raiserror @errno @errmsg
rollback transaction
end
go
Рис. 16.15.
Код измененного шаблона, включающий в себя специальный код (он выделен), нужный для того, чтобы изменять значение product-sold-quantity в таблице PRODUCT каждый раз при добавлении новой строки в таблицу ORDER LINE, показан ниже. Для того чтобы просмотреть расширенный код после того, как шаблон, заданный по умолчанию, изменен, щелкните по окну Expanded Code.
сreate trigger %TriggerName on %TableName
for %Actions(',')
as
/* %Actions(',') trigger on %TableName */
/* default body for %TriggerName */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
%PKDecl(,@ins),
@errno int,
@errmsg varchar(255)
select @numrows = @@rowcount
%ForEachChildRel(){
%RelTemplate
%if (%==(%VerbPhrase,is requested on)){
update %Parent from %Parent,inserted
set product-sold-quantity = %Parent.product-sold-quantity
+inserted.order-quantity
where
%JoinFKPK(inserted,%Parent)
}
}
%ForEachParentRel(){
%RelTemplate
}
return
error:
raiserror @errno @errmsg
rollback transaction
end
go
Рис. 16.16
Далее приводится расширенный код триггера, где Вы можете увидеть реальные значения, которые заменили макропеременные, использованные в коде шаблона. Обратите внимание, что специальный код, изменяющий таблицу PRODUCT, дублируется в каждом триггере Child-Insert, связанном с сущностью ORDER-LINE.