|
|
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
CREATE TABLE table1 (field1 int,field2 int) GO CREATE TABLE table2 (field1 int,field2 int) GO CREATE TRIGGER ut_table1 ON table1 FOR UPDATE AS INSERT table2 SELECT field1,field2 FROM INSERTED GO UPDATE table1 SET field1=1 GO UPDATE table1 SET field2=1 GO UPDATE table1 SET field1=1,field2=1 GO Что мне нужно сделать, что отслеживать в триггере, чтобы он не срабатывал в двух последних UPDATE'ах, т.е. если обновляется только field1, то должен сработать, а в осталных случаях нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 19:07:09 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
Использовать в триггере функцию COLUMNS_UPDATED() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 20:45:54 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
В 6.5 это будет работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2002, 21:57:47 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
6.5 will not reliably determine what fields got actually updated with UPDATE() function, so you'll probably need to test against the equality of field values of INSERTED and DELETED tables to see if a particular field got updated or not. But if the values are the same it is also not guaranteed that Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2002, 02:05:43 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
В 6.5 в триггере будет работать if UPDATE(field1), но только имейте ввиду что оно проверяет не реальное изменение данных, а были ли эти колонки использованы при вызове UPDATE table1 COLUMNS_UPDATED() по моему работать не будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2002, 10:13:37 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
Че-то про COLUMNS_UPDATED в BOL для 6.5 я ни че не нарыл. А предыдущие посты тока сейчас прочитал. Сегодня на работе пришлось извратиться следующим образом: (в триггере на UPDATE) --поле Kod заведомо никогда не обновляется IF (NOT EXISTS (SELECT INSERTED.field1 FROM INSERTED, DELETED WHERE INSERTED.filed1=DELETED.field1 AND INSERTED.Kod=DELETED.Kod)) BEGIN --сюда попадаем, если field1 не обновлялось ................... END ELSE ROLLBACK TRANSACTION вроде работает правильно Да, и еще вопрос: если в триггере на UPDATE существуют такие штуки как INSERTED и DELETED, то это означает, что обновление делается сервером в два этапа: сначала удаление, потом вставка????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2002, 23:50:20 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
4 Robert Djabarov Получилось так, что сначала отправил пост, а потом прочитал ваш. Вроде бы вы это посоветовали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2002, 23:53:51 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
Ну так кто ответит? если в триггере на UPDATE существуют такие штуки как INSERTED и DELETED, то это означает, что обновление делается сервером в два этапа: сначала удаление, потом вставка????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2002, 00:23:58 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
2 Smile А какая Вам разница как он это делает? Вы что от этого как-то измените логику программы? Процесс обновления данных сервером очень сложный и сугубо внутренний, в зависимости от разных ситуаций он может делать в два этапа, а может в один. Вобщем, воспринимайте эти две таблицы как данность и думайте о чем-то более земном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2002, 09:36:10 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
Хаюшки! Я вообще-то считал всегда, что Inserted и Deleted нужны исключительно для получения в триггере информации о старых и новых данных, что изменения проводятся в виде внутренней транзакции и подозреваю, что Вы действительно не сможете разделить два этапа (удаления и вставки) ежели они даже и существуют... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2002, 09:50:51 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
4 SergSuper Разве плохо знать какие процессы протекают "внутри" системы? 4 Denis_Ka Опять же, поинтересовался просто. Для общего развития и ничего разделять не пытаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2002, 19:20:11 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
2 Smile Плохо интересоваться Теорией относительности, не зная законов Ньютона :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2002, 10:13:21 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
-- Кстати, Эйнштейн в школе был весьма посредственным учеником вообще и математиком в частности. --Я по своей неграмотности суюсь "во все дыры". Залез в LumigenExplorer и обнаружил, что в журнале транзакций на одно моё UPDATE ... SET ... из триггера пишется DELETE ROWS, INSERT ROWS и далее внизу старые значения (табл. deleted), новые (inserted). --Из опыта работы с NetWare выяснилось, что на одну перезапись файла (например в фоновом автосохранении приложений Office ) salvage file (я так понял читалка своего рода журнала транзакций) пишет "file deleted", ну и там далее дату, автора и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2002, 12:55:05 |
|
||
|
Подскажите!
|
|||
|---|---|---|---|
|
#18+
4 SergSuper Раз такое дело... Ничего неземного в этих таблицах нет. Все намного проще чем у Ньютона. Прочитал, что: "... у триггера есть доступ к предыдущему и последующему образам данных (эти образы восстанавливаются из журнала транзакций в псевдотаблицы, доступные из триггера)..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 00:18:34 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32038456&tid=1821588]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
29ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 287ms |

| 0 / 0 |
