Возможно повесить триггер на кластерное (материализованное) представление?
Здравствуйте!
Представление из нескольких таблиц, сделал его кластеризованным, повесил индекс на уникальный столбец.
Возможно ли повесить триггер на это представление?
Проблема в том, что не могу триггер повесить на представление...
Артём Каретников: Мне нужно в логи писать изменение в представлении...
Почему так: заказчик хочет видеть изменения в данных из которых состоит представление, оно состоит из 4 таблиц, весить триггер на 4 таблицы можно, но запрос будет большой для конечного отображения данных пользователю...
1. Триггер. Срабатывает на обновление каждой строки и выполняет каждый раз все, что в нем.
2. Апдейт - за один раз обработает столько строк, сколько указали.
Я понял... В Update засунуть OUTPUT и сделать Insert в таблицу с логами...
Спасибо за пример, буду пробовать в следующий раз так.
Но есть две проблемы:
1. запрос, который в приложении, которое делает update в таблицах мне не дадут править.
2. мне нужно хранить "до" и "после" по данным в представлении , а не по таблицам. Почему? - Много данных в разных таблицах обновляется, а может и не обновиться в какой-либо из них и ИЗ-ЗА этого запрос сложный получается для отображения изменений. Придется делать еще одно кластеризованное представление для быстрого генерирования отчета по изменениям в таблице :)
Артём Каретников: "Триггер. Срабатывает на обновление каждой строки и выполняет каждый раз все, что в нем." Только в Oracle есть триггеры FOR EACH ROW. В MS SQL триггер — на таблицу и обрабатывает он ВСЕ изменённые строки.
Константин Цветков: Константин, когда вешаю триггер на представление, то появляется ошибка:
"Объект не существует или недопустим в этой операции."
Сам триггер:
USE PROVISION_test
GO
CREATE TRIGGER dbo.trigger1
ON view1Asd
after UPDATE
AS
BEGIN
insert INTO PROVISION_test..history
(
type,name
)
SELECT 'обновление', DELETED.name
FROM deleted
END
GO