Использование триггера на вставку позволяет реализовать расшифровки. Ну стандартная ситуация. Оформляется счет на какую-то сумму. Этот счет имеет номер и имеет общую сумму. Но вместе с этим он имеет и расшифровку выражающуюся в списке оказанных услуг. Хранить нужно и общую сумму по счету и расшифровку. Данная ситуация укладывается в модель один ко многим описанную в "Шаг 116 - Связи один ко многим". Один счет много составляющих. При срабатывании триггера ставки создается временная таблица inserted, в которой находится одна или несколько вставляемых записей. Вот структура таблицы на все услуги, я ее назвал allchet.
Здесь есть ID_CHET, то есть по какому счету услуга, у нее есть имя и цена. И есть таблица chet, где будет храниться счет и его сумма.
Я взял везде Int, чтобы не морочить голову с типами. Итак. При добавлении в таблицу allchet списка нужно добавить в таблицу chet его номер и стоимость. Возможны две ситуации. Первая - это когда заносится первая запись расшифровки, и вторая, когда заносятся дополнительные записи расшифровки. На них нужно реагировать по разному.
CREATE TRIGGER INSERT_NOMER ON dbo.allchet FOR INSERT AS DECLARE @summs int DECLARE @ids int SELECT @ids=(SELECT IDCHET FROM inserted) IF ( SELECT COUNT(*) FROM chet WHERE chet.Nomer=@ids) > 0 BEGIN SELECT @summs=(SELECT SUM(COUNTPRISE) FROM allchet WHERE allchet.idchet=@ids) UPDATE chet SET PRISE=@summs WHERE nomer=@ids END ELSE BEGIN SELECT @summs=(SELECT COUNTPRISE FROM inserted) INSERT INTO chet (Nomer,Prise) VALUES(@ids,@summs) END
Здесь я написал, что первое это получить ID счета. Потом проверить, есть ли счета с такими ID. Если да, то получить новую сумму, иначе создать такой счет. Ну, что будем тестировать ? В Access самое простое. Заносим расшифровки:
Смотрим сводную таблицу.
Добавим еще одну запись к расшифровкам для первого счета.
Сработало.