powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно написать триггер на обновление для вьюшки?
7 сообщений из 7, страница 1 из 1
Как правильно написать триггер на обновление для вьюшки?
    #39719628
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вьюшка такого вида:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE VIEW [dbo].[VObjHuman]
AS
SELECT        dbo.ObjHuman.ObjectID, dbo.ObjHuman.FirstName, dbo.ObjHuman.MiddleName, dbo.ObjHuman.LastName, dbo.ObjHuman.SexID, dbo.ObjHuman.BirthDay, dbo.ObjHuman.BirthPlace, dbo.ObjHuman.NationalityID, 
                         dbo.ObjHuman.CitizenshipID, dbo.Object.ObjectNameID, dbo.Object.Qualify, dbo.Object.CreateDate, dbo.Object.ModifyDate, dbo.Object.Creator, dbo.Object.Editor
FROM            dbo.Object INNER JOIN
                         dbo.ObjHuman ON dbo.Object.ObjectID = dbo.ObjHuman.ObjectID


и вот делаю такой триггер на обновление:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TRIGGER [dbo].[updVObjHuman] ON [dbo].[VObjHuman]
instead of update
as 
begin
 set nocount on 
 update ObjHuman
 set ObjHuman.FirstName=Inserted.FirstName, 
     ObjHuman.MiddleName=Inserted.MiddleName, 
	 ObjHuman.LastName=Inserted.LastName, 
	 ObjHuman.SexID=Inserted.SexID, 
	 ObjHuman.BirthDay=Inserted.BirthDay, 
	 ObjHuman.BirthPlace=Inserted.BirthPlace, 
	 ObjHuman.NationalityID=Inserted.NationalityID, 
	 ObjHuman.CitizenshipID=Inserted.CitizenshipID
 from Inserted where ObjHuman.ObjectID = Inserted.ObjectID	  
 update Object
 set Object.Qualify=Inserted.Qualify, 
	 Object.ModifyDate=GetDate(), 
	 Object.Editor=system_user  
 from Inserted where Object.ObjectID = Inserted.ObjectID	   
end


И вот собственно ради двух строк:
Object.ModifyDate=GetDate(),
Object.Editor=system_user
я вынужден был описать все поля ибо никакой другой вариант триггера с такой вьюшкой работать не захотел. Это единственное решение в данном случае или есть более короткая и правильная альтернатива?
...
Рейтинг: 0 / 0
Как правильно написать триггер на обновление для вьюшки?
    #39719629
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради двух строк достаточно было повесить after update триггер на ObjHuman с этими двумя строчками и даже не заморачиваться на представление.
...
Рейтинг: 0 / 0
Как правильно написать триггер на обновление для вьюшки?
    #39719631
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ведь не сработает такой тригер при редактировании вьюшки.
...
Рейтинг: 0 / 0
Как правильно написать триггер на обновление для вьюшки?
    #39719633
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смысл этой вьюшки в том, что она создает единое представление для данных разнесенных по двум таблицам, в одной таблице сами данные, а во второй дополнительная служебная информация, но для такой синхронной работы надо сделать триггер на представление, что я и пытаюсь сделать. Почему-то описание триггера вот в таком виде:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER [dbo].[updVObjHuman] ON [dbo].[VObjHuman]
after update
as 
begin
 set nocount on 
 update VObjHuman
 set VObjHuman.ModifyDate=GetDate(), 
	 VObjHuman.Editor=system_user  
 from Inserted where VObjHuman.ObjectID = Inserted.ObjectID	 
end


дает ошибку:
Msg 8197, Level 16, State 6, Procedure updVObjHuman, Line 2 [Batch Start Line 9]
The object 'dbo.VObjHuman' does not exist or is invalid for this operation.
...
Рейтинг: 0 / 0
Как правильно написать триггер на обновление для вьюшки?
    #39719638
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъСмысл этой вьюшки в том, что она создает единое представление для данных разнесенных по двум таблицам, в одной таблице сами данные, а во второй дополнительная служебная информация, но для такой синхронной работы надо сделать триггер на представление, что я и пытаюсь сделать. Почему-то описание триггера вот в таком виде:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TRIGGER [dbo].[updVObjHuman] ON [dbo].[VObjHuman]
after update
as 
begin
 set nocount on 
 update VObjHuman
 set VObjHuman.ModifyDate=GetDate(), 
	 VObjHuman.Editor=system_user  
 from Inserted where VObjHuman.ObjectID = Inserted.ObjectID	 
end


дает ошибку:
Msg 8197, Level 16, State 6, Procedure updVObjHuman, Line 2 [Batch Start Line 9]
The object 'dbo.VObjHuman' does not exist or is invalid for this operation.

Дык, страдалец, нафега ты в триггере саму View обновляешь?
Так не пойдет.
Рекурсия недопустима.
...
Рейтинг: 0 / 0
Как правильно написать триггер на обновление для вьюшки?
    #39719749
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Перечислять все поля" надо не "ради двух строк", а чтобы обновление через представление работало. Чтобы сделать аудит, представление не нужно.
...
Рейтинг: 0 / 0
Как правильно написать триггер на обновление для вьюшки?
    #39719822
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел попробовать ограничится одним триггером для вьюшки, но видимо придется все-же писать как изначально хотел, для каждой таблицы свой триггер на обновление. Тогда получается все компактно и красиво. Пока все, всем спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как правильно написать триггер на обновление для вьюшки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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