powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите!
14 сообщений из 14, страница 1 из 1
Подскажите!
    #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
Подскажите!
    #32037606
SergCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовать в триггере функцию COLUMNS_UPDATED()
...
Рейтинг: 0 / 0
Подскажите!
    #32037616
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 6.5 это будет работать?
...
Рейтинг: 0 / 0
Подскажите!
    #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
Подскажите!
    #32037652
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 6.5 в триггере будет работать if UPDATE(field1), но только имейте ввиду что оно проверяет не реальное изменение данных, а были ли эти колонки использованы при вызове UPDATE table1

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

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

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

4 Denis_Ka

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

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

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

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


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