(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 

Конференция "ERwin"

Обсуждение вопросов, связанных с компанией Computer Associates, ее продуктами ERwin Data Modeler, ERwin Web Portal, ARCserve и др.

 
 
Добавить сообщение »

Тема: генерация триггеров Erwin -> Sybase System

Автор:  Сергей Маклаков Дата: 22.02.2001 15:17
Насколько можно понять из текста, таблица b - и генерируется триггер ON PARENT UPDATE CASCADE. Проверяется количество соответствующих записей в родительской таблице, которое не может быть больше 1. Этот триггер для корректной работы требует наличия триггера на родительской таблице, поддерживающего правило ссылочной целостности ON CHILD UPDATE CASCADE. Если стандартный шаблон Вас не удовлетворяет, рекомендую Вам не переписывать каждый раз триггер вручную, а переопределить шаблон либо на уровне модели, либо на уровне связи.
>Используется Erwin 3.52 и Sybase System 11.
>Ниже представлен фрагмент триггера для таблицы "b" , созданный Erwin' ом.
>________________________________________
>create trigger tU_b on b for UPDATE as
>/* ERwin Builtin Tue Oct 24 09:17:21 2000 */
>/* UPDATE trigger on b */
>begin
> declare @numrows int,
> @nullcnt int,
> @validcnt int,
> @insa int,
> @insb int,
> @errno int,
> @errmsg varchar(255)
>
> select @numrows = @@rowcount
> /* ERwin Builtin Tue Oct 24 09:17:21 2000 */
> /* b R/10 c ON PARENT UPDATE CASCADE */
> if
> /* %ParentPK(" or",update) */
> update(a) or
> update(b)
> begin
> if @numrows = 1
> begin
> select @insa = inserted.a,
> @insb = inserted.b
> from inserted
> update c
> set
> /* %JoinFKPK(c,@ins," = ",",") */
> c.a = @insa,
> c.b = @insb
> from c,inserted,deleted
> where
> /* %JoinFKPK(c,deleted," = "," and") */
> c.a = deleted.a and
> c.b = deleted.b
> end
> else
> begin
> select @errno = 30006,
> @errmsg = 'Cannot cascade b UPDATE because more than one row
>has been affected.'
> goto error
> end
> end
>______________________________________
>Очевидно, что этот триггер при изменении ключевого поля таблицы "a"
>обеспечивает каскадную замену только в том случае, если при этом в таблице
>"b" изменяется только одна запись.
>
>Для полноценной каскадной замены приходится вручную заменять данный
>фрагмент на следующий:
>drop trigger tU_b;
>create trigger tU_b on b for UPDATE as
>begin
> if update(a)
> update c set c.a = inserted.a
> from c,inserted,deleted
> where c.a = deleted.a and c.b = deleted.b
> if update(b)
> update c set c.b = inserted.b
> from c,inserted,deleted
> where c.a = inserted.a and c.b = deleted.b
>end;
>______________________________________
>Вопрос: Почему установлено такое ограничение и можно ли обеспечить
>генерацию триггеров для полноценной каскадной замены ?
Ответить на сообщение »
 
Автор:  В.Н. Дата: 22.02.2001 10:56
Используется Erwin 3.52 и Sybase System 11.
Ниже представлен фрагмент триггера для таблицы "b" , созданный Erwin' ом.
________________________________________
create trigger tU_b on b for UPDATE as
/* ERwin Builtin Tue Oct 24 09:17:21 2000 */
/* UPDATE trigger on b */
begin
declare @numrows int,
@nullcnt int,
@validcnt int,
@insa int,
@insb int,
@errno int,
@errmsg varchar(255)

select @numrows = @@rowcount
/* ERwin Builtin Tue Oct 24 09:17:21 2000 */
/* b R/10 c ON PARENT UPDATE CASCADE */
if
/* %ParentPK(" or",update) */
update(a) or
update(b)
begin
if @numrows = 1
begin
select @insa = inserted.a,
@insb = inserted.b
from inserted
update c
set
/* %JoinFKPK(c,@ins," = ",",") */
c.a = @insa,
c.b = @insb
from c,inserted,deleted
where
/* %JoinFKPK(c,deleted," = "," and") */
c.a = deleted.a and
c.b = deleted.b
end
else
begin
select @errno = 30006,
@errmsg = 'Cannot cascade b UPDATE because more than one row
has been affected.'
goto error
end
end
______________________________________
Очевидно, что этот триггер при изменении ключевого поля таблицы "a"
обеспечивает каскадную замену только в том случае, если при этом в таблице
"b" изменяется только одна запись.

Для полноценной каскадной замены приходится вручную заменять данный
фрагмент на следующий:
drop trigger tU_b;
create trigger tU_b on b for UPDATE as
begin
if update(a)
update c set c.a = inserted.a
from c,inserted,deleted
where c.a = deleted.a and c.b = deleted.b
if update(b)
update c set c.b = inserted.b
from c,inserted,deleted
where c.a = inserted.a and c.b = deleted.b
end;
______________________________________
Вопрос: Почему установлено такое ограничение и можно ли обеспечить
генерацию триггеров для полноценной каскадной замены ?
Ответить на сообщение »
 

Добавить сообщение »

 Распечатать »
 Правила публикации »
   
 Рекомендовать »  
 

Магазин программного обеспечения   WWW.ITSHOP.RU
erwin Data Modeler Standard Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
erwin Data Modeler Navigator Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
erwin Data Modeler Workgroup Edition r9.7 - Product plus 1 Year Enterprise Maintenance Commercial
Stimulsoft Reports Server Team 10 users
Антивирус ESET NOD32 SMALL Business Pack newsale for 5 user. Электронный ключ
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Delphi - проблемы и решения
Мастерская программиста
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Заработок в сети интернет (20)
Зайди сюда - http://www.netbusin.boom.ru и узнай подробности.
 
Модульные здания от производителя (1)
Чтобы сэкономить время на строительство и существенно снизить финансовые затраты, оптимальным...
 
Отмена последнего шага в BPwin (2)
Подскажите, пожалуйста, есть ли в BPwin кнопка (функция) отмены последнего "шага", типа как в...
 
Где взять лицензионный ключ для AllFusion Process Modeler (BPwin) 7? (6)
Выручайте!!! где найти ключ, ужасно срочно нужна программа. заранее спасибо!
 
Русификация рамки IDEF0 BPWin4 (44)
Возможно ли русифицировать рамку диаграмм в BPWin4?
 
 
 



    
rambler's top100 Rambler's Top100