|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
Как лучше делать цикл по удаленным (добавленным) записям в триггере, если для каждой записис надо осуществить проверку статуса (разрешена такая опреция или нет) в одной таблице и затем пересчетать общую сумму и записать в другую? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 18:02 |
|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 18:14 |
|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
Простой пример : Есть две таблицы : Одна содержит Счета: (номер, статус, основная сумма, налог, коммисия, дополнительная сумма, общаяя сумма и т.д.) Вторая содержит дополнительный суммы (номер счета,Сумма ,обоснование и т.д.) При добавлении новой записи (или сразу нескольких), тоже самое при удалении надо проверить статус счета (например если он уже напечатан и отправлен) то отменить изменения если нет то пересчитать дополнительную сумму по всем дополнительным расходам каждого из счетов которых коснулись изменения и записать эти данные в таблицу счетов, в поле дополнительные расходы ... (Последнее не так важно т.к. в принципе можно не хранить дополнительную сумму для каждого счета, а вычислять ее во View но это тоже не очень удобно) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 18:57 |
|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
К сожалению в триггерах не обойтись без циклов так как существуют групповые операции по изменению данных, а триггер у MSSQL вызывается один раз DECLARE Inst CURSOR FOR SELECT * FROM Deleted OPEN Inst FETCH NEXT FROM Inst INTO ... -- тут локальный переменные WHILE @@FETCH_STATUS = 0 BEGIN .... -- тут операции FETCH NEXT FROM Inst INTO ... -- тут локальный переменные END CLOSE Inst DEALLOCATE Inst ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 19:03 |
|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
вот как раз для таких задач циклы и курсоры совсем не нужны попробуйте работать не с каждой записью, а сразу с массивом данных - и всё получиться, и гораздо проще чем вам казалось ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 09:42 |
|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
Можно какойто пример как без цикла организовать проверку для каждой записи, в принципе надо осуществить только две операции либо запретить изменения либо разрешить ... Вопрос в догонку а в T-SQL вообще есть что то вроде FOR x=1 TO 10 ... вобщем цыкл повторяющися заданое чило раз ? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 10:30 |
|
Цикл по удаленным или добавленным записям в триггере ?
|
|||
---|---|---|---|
#18+
2 ArtP Бррррр..... аж страшно 2 Dennisl create trigger ti_Суммы on Суммы for insert as begin delete from Суммы inner join Счета on Суммы.ID = Счета.ID where Счета.Статус = "Плохой" update Счета set [че там нужно апдейтить] from Счета, Суммы, insertded where Счета.ID = Суммы.ID and Суммы.ID = inserted.ID end В запросах под ID я понимал PK, FK из вашего описания таблиц я не понял где там первичный и внешний ключи. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 10:50 |
|
|
start [/forum/topic.php?fid=46&msg=32003103&tid=1827196]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 154ms |
0 / 0 |