Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 триггер на обновление записи?  [new]
Solomka
Member

Откуда: Москва
Сообщений: 187
Как сделать триггер на обновление записи?

Пыталась сделать триггер на обновление записи по аналогии с добавлением записи:
Смысл в том что смотрим какие паараметры в обновляемой записи таблицы и берез эти же обновляемые параметры записываем в другую таблицу.
Код триггера:
IF OBJECT_ID(N'triggerUpdateOneEveryDayReport', N'TR') IS NOT NULL
    DROP TRIGGER triggerUpdateOneEveryDayReport;
GO


CREATE TRIGGER triggerUpdateOneEveryDayReport
	ON [Отчет_о_проделанной_работе]
	FOR UPDATE 
AS 
  
    DECLARE @ProcentReady int, 
			@IdTask int
			
    SELECT @ProcentReady = [Готовность_в_процентах] FROM Updated 
    SELECT @IdTask = [Задача_ID] FROM Updated 
 
  
	BEGIN

	UPDATE [Zada4i].[dbo].[Задача]
		SET  
			[Готовность в %] = @ProcentReady
		WHERE  [ID] =   @IdTask
	END
		
 
GO

Причем компилируется...
Но при при обновлении выдается ошибка:
ошибка
Ошибка сервера в приложении '/AnotherHost/systemManagerControl'.
Недопустимое имя объекта "Updated".
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.

Сведения об исключении: System.Data.SqlClient.SqlException: Недопустимое имя объекта "Updated".

Ошибка источника:

Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.

Трассировка стека:

[SqlException (0x80131904): Недопустимое имя объекта "Updated".]
23 май 12, 14:03    [12601127]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Solomka, а Updated вы сами придумали? Может надобно поглядеть в BOL?
23 май 12, 14:05    [12601138]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
Glory
Member

Откуда:
Сообщений: 104751
ошибка
Недопустимое имя объекта "Updated".

А кто и где создал объект "Updated" ?
23 май 12, 14:05    [12601140]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
http://msdn.microsoft.com/en-us/library/ms191300(v=sql.105).aspx
The deleted table stores copies of the affected rows during DELETE and UPDATE statements. During the execution of a DELETE or UPDATE statement, rows are deleted from the trigger table and transferred to the deleted table. The deleted table and the trigger table ordinarily have no rows in common.

The inserted table stores copies of the affected rows during INSERT and UPDATE statements. During an insert or update transaction, new rows are added to both the inserted table and the trigger table. The rows in the inserted table are copies of the new rows in the trigger table.
23 май 12, 14:09    [12601163]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Solomka, так пробовали?
CREATE TRIGGER triggerUpdateOneEveryDayReport
	ON [Отчет_о_проделанной_работе]
	/* FOR */ AFTER UPDATE
23 май 12, 14:10    [12601173]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Solomka, а, блин.. предыдущий мой пост забыть! ))
заменить
FROM Updated
на
FROM [INSERTED]
23 май 12, 14:12    [12601199]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Solomka, ну и до кучи поразмышляйте что у вас в триггере будет происходить, если вы захотите проапдейтить более одной записи.
23 май 12, 14:19    [12601281]     Ответить | Цитировать Сообщить модератору
 Re: триггер на обновление записи?  [new]
RubinDm
Member

Откуда:
Сообщений: 461
kDnZP
Solomka, ну и до кучи поразмышляйте что у вас в триггере будет происходить, если вы захотите проапдейтить более одной записи.
Очень верное замечание.

Solomka, попробуйте так:
create trigger triggerUpdateOneEveryDayReport
	on [Отчет_о_проделанной_работе]
	/* FOR */ AFTER update 
as
begin

  set nocount on;
  
  update T set T.[Готовность в %] = R.[Готовность_в_процентах]
  from [Zada4i].[dbo].[Задача] T
  join [Отчет_о_проделанной_работе] R on R.[Задача_ID] = T.[ID]
  where T.[ID] in ( select [Ins].[ID] from [INSERTED] [Ins] )

end
go
23 май 12, 14:46    [12601653]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить