Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Мутирующие таблицы  [new]
СПРАЗДНИКОМВСЕХ
Guest
У меня вопрос маленький.

Делаю update :

update DOCUMENT
set f_PROC_CODE= '01'
where f_DATE = ...

Вопрос:
Могу ли я в тригере на таблице DOCUMENT делать
select * from document.

т.е есть ли в MS SQL понятие мутирующей таблицы ( это из Oracle)
9 май 03, 17:30    [194463]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
СПРАЗДНИКОМВСЕХ
Guest
тригер FOR EACH ROW
т.е срабатывает на каждой записи
9 май 03, 17:31    [194465]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
в MS SQL нет триггеров FOR EACH ROW. Триггер срабатывает на событие.


Могу ли я в тригере на таблице DOCUMENT делать
select * from document.


Можете. Причем если триггер AFTER, то в таблице будут уже обнавленные данные
9 май 03, 17:43    [194469]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
СПРАЗДНИКОМВСЕХ
Guest
А как строиться обраотка в тригере подскажите например надо
1) Заполнить некоторые поля значениями вычисляемые по дуругим полям
2) Если тригер на событие то как определить запись которую изменяли?
9 май 03, 18:22    [194480]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
olden69
Member

Откуда: Киев
Сообщений: 169
>Заполнить некоторые поля значениями вычисляемые по дуругим полям

а зачем тут триггер?

проще один раз создать в таблице вычисляемое поле
9 май 03, 19:26    [194496]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18305
2Glory
Причем если триггер AFTER, то в таблице будут уже обнавленные данные
что это за триггер?
знаю INSERT, DELETE, UPDATE но они срабатывают при попытке т.е. до совешения изменений.
а AFTER - у меня не получается получить такое. А решило бы многие проблемы.
9 май 03, 19:49    [194501]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
olden69
Member

Откуда: Киев
Сообщений: 169
в полноценной СУБД неплохо иметь триггера и BEFORE и AFTER
но в MS SQL к сожелению триггера только AFTER или INSTEAD

>знаю INSERT, DELETE, UPDATE но они срабатывают при попытке т.е. до >совешения изменений.
>а AFTER - у меня не получается получить такое. А решило бы многие проблемы.

хм... создайте простой триггер на INSERT и проверьте в нем наличие вставленного поля
и Вы поймете, что на самом деле НЕ "они срабатывают при попытке т.е. до совешения изменений" -
9 май 03, 20:15    [194505]     Ответить | Цитировать Сообщить модератору
 Re: Мутирующие таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
2вадя

Если дело дошло до выполнения триггера, то значит данные уже в таблице(ну или наоборот удалены, если delete). Другое дело, что они могут быть не видны в других коннектах. И вообще другой вопрос остануться ли они в таблице после завершения работы триггера.

До версии SQL2000 все триггера были только AFTER. В версии SQL2000 появились INSTEAD триггеры, т.е. выполняющиеся вместо добавления/изменения/удаления данных.


2СПРАЗДНИКОМВСЕХ
2) Если тригер на событие то как определить запись которую изменяли?
Откройте BOL и узнаете

"A few special tables are used in CREATE TRIGGER statements:

deleted and inserted are logical (conceptual) tables. They are structurally similar to the table on which the trigger is defined, that is, the table on which the user action is attempted, and hold the old values or new values of the rows that may be changed by the user action. "

1) Заполнить некоторые поля значениями вычисляемые по дуругим полям
- использовать вычисляемы поля, как предложил olden69
- либо в триггере выполнить еще одну команду UPDATE тойже таблицы, связывая ее с таблицей inserted/deleted.

Последнее кстати делает наличие триггеров BEFORE необязательными.
9 май 03, 21:52    [194540]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить