Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите! / 14 сообщений из 14, страница 1 из 1
18.07.2002, 19:07:09
    #32037568
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
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, то должен сработать, а в осталных случаях нет?
...
Рейтинг: 0 / 0
18.07.2002, 20:45:54
    #32037606
SergCat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
Использовать в триггере функцию COLUMNS_UPDATED()
...
Рейтинг: 0 / 0
18.07.2002, 21:57:47
    #32037616
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
В 6.5 это будет работать?
...
Рейтинг: 0 / 0
19.07.2002, 02:05:43
    #32037637
Robert Djabarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
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
UPDATE TABLE_1 SET FIELD_1 = FIELD_1
didn't occur.
...
Рейтинг: 0 / 0
19.07.2002, 10:13:37
    #32037652
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
В 6.5 в триггере будет работать if UPDATE(field1), но только имейте ввиду что оно проверяет не реальное изменение данных, а были ли эти колонки использованы при вызове UPDATE table1

COLUMNS_UPDATED() по моему работать не будет
...
Рейтинг: 0 / 0
19.07.2002, 23:50:20
    #32037857
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
Че-то про 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, то это означает, что обновление делается сервером в два этапа: сначала удаление, потом вставка?????
...
Рейтинг: 0 / 0
19.07.2002, 23:53:51
    #32037858
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
4 Robert Djabarov

Получилось так, что сначала отправил пост, а потом прочитал ваш. Вроде бы вы это посоветовали
...
Рейтинг: 0 / 0
23.07.2002, 00:23:58
    #32038139
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
Ну так кто ответит?
если в триггере на UPDATE существуют такие штуки как INSERTED и DELETED, то это означает, что обновление делается сервером в два этапа: сначала удаление, потом вставка?????
...
Рейтинг: 0 / 0
23.07.2002, 09:36:10
    #32038153
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
2 Smile
А какая Вам разница как он это делает? Вы что от этого как-то измените логику программы?
Процесс обновления данных сервером очень сложный и сугубо внутренний, в зависимости от разных ситуаций он может делать в два этапа, а может в один. Вобщем, воспринимайте эти две таблицы как данность и думайте о чем-то более земном.
...
Рейтинг: 0 / 0
23.07.2002, 09:50:51
    #32038161
Denis_Ka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
Хаюшки!
Я вообще-то считал всегда, что Inserted и Deleted нужны исключительно для получения в триггере информации о старых и новых данных, что изменения проводятся в виде внутренней транзакции и подозреваю, что Вы действительно не сможете разделить два этапа (удаления и вставки) ежели они даже и существуют...
...
Рейтинг: 0 / 0
23.07.2002, 19:20:11
    #32038364
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
4 SergSuper

Разве плохо знать какие процессы протекают "внутри" системы?

4 Denis_Ka

Опять же, поинтересовался просто. Для общего развития и ничего разделять не пытаюсь
...
Рейтинг: 0 / 0
24.07.2002, 10:13:21
    #32038409
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
2 Smile
Плохо интересоваться Теорией относительности, не зная законов Ньютона :)
...
Рейтинг: 0 / 0
24.07.2002, 12:55:05
    #32038456
AndreK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
-- Кстати, Эйнштейн в школе был весьма посредственным учеником вообще и математиком в частности.

--Я по своей неграмотности суюсь "во все дыры". Залез в LumigenExplorer и обнаружил, что в журнале транзакций на одно моё UPDATE ... SET ... из триггера пишется DELETE ROWS, INSERT ROWS и далее внизу старые значения (табл. deleted), новые (inserted).

--Из опыта работы с NetWare выяснилось, что на одну перезапись файла (например в фоновом автосохранении приложений Office ) salvage file (я так понял читалка своего рода журнала транзакций) пишет "file deleted", ну и там далее дату, автора и т.д.
...
Рейтинг: 0 / 0
25.07.2002, 00:18:34
    #32038644
Smile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите!
4 SergSuper

Раз такое дело...
Ничего неземного в этих таблицах нет.
Все намного проще чем у Ньютона.
Прочитал, что: "... у триггера есть доступ к предыдущему и последующему образам данных (эти образы восстанавливаются из журнала транзакций в псевдотаблицы, доступные из триггера)..."
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите! / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]