|
|
|
триггер
|
|||
|---|---|---|---|
|
#18+
Существует таблица period (id_period, date_from, date_to, name, type_period) Необходимо создать триггер, проеряющий правильность ввода периодов планирования. Иными словами, нельзя допускать ситуацию, при которой в таблице period существуют записи с одним и тем же типом периода (type_period = 'year', 'month', 'quarter'), но с перекрывающимися диапазонами дат. Т.е не допустимо: 1 квартал с 01/01/2001 по 30/03/2002 2 квартал с 30/03/2002 по ... Нижеприведенный триггер вроде бы должен работать, но при добавлении новой даты в любом случае возврат откат по RAISERROR. CREATE TRIGGER test ON period FOR INSERT, UPDATE AS DECLARE @RetCode int SET @RetCode = 50001 IF EXISTS ( SELECT * FROM inserted INS, period PR WHERE EXISTS( SELECT * FROM period PR, inserted INS WHERE NOT (INS.name = PR.name) AND INS.type_period = PR.type_period ) AND -- условие пересечения диапазонов дат ( (INS.date_from <= PR.date_from AND INS.date_to > PR.date_from) OR (INS.date_from >= PR.date_from AND INS.date_from < PR.date_to) OR (INS.date_to > PR.date_from AND INS.date_to <= PR.date_to) ) ) BEGIN ROLLBACK TRANSACTION RAISERROR @RetCode 'Диапазоны дат не могут пересекаться!' END RETURN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2002, 13:10:54 |
|
||
|
триггер
|
|||
|---|---|---|---|
|
#18+
И правильно вываливается! Дело в том, что триггер срабатывает ПОСЛЕ вставки записей в таблицу period, поэтому ВСЕ записи из таблицы INSERTED уже присутствуют в таблице PERIOD. Таким образом если в таблице PERIOD есть primary key (например, PK), то ваш код должен выглядеть следующим образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2002, 13:25:02 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=46&tid=1821392]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 329ms |

| 0 / 0 |
