2015-12-03 2 views
1

Я новичок в хранимых процедурах и триггерах. После выполнения UPDATE моей LeaveRequest таблицы для конкретной строки, у меня есть следующий триггер:Как я могу выбрать правую строку для моего триггера

ALTER TRIGGER [dbo].[LeaveRequestTrig] 

ON [dbo].[LeaveRequest] 
    AFTER UPDATE 
AS 
BEGIN 

    DECLARE @StateId int 

SET @StateId = (SELECT LeaveRequest.LeaveRequestStateId FROM LeaveRequest) 

IF (@StateId = 2) 
    PRINT 'yes' 
ELSE 
    PRINT 'no' 

END 

Но вот проблема, как я могу SELECT строку, которая только что была UPDATE d, если у меня нет те же параметры, что и последний запрос?

Скажите, что мой UPDATE был для user = kade и где id = 55 как я могу выбрать ту же строку в моем триггере?

+1

Это может помочь: https://msdn.microsoft.com/en-us/library/ms191300.aspx –

ответ

1

Есть псевдо-таблицы под названием DELETED и INSERTED, доступные вам внутри триггера, вы можете получить обновленные идентификаторы. Обратите внимание, что в общем случае в одном запросе может быть несколько строк, поэтому вы можете получить несколько строк в псевдошколах DELETED и INSERTED.

+0

Вторая часть вашего заявления является то, что действительно беспокоит меня, я получаю сообщение об ошибке, в котором указано, что он возвращает более одного значения. Но у меня только UPDATEd одна строка с определенными параметрами, как я могу получить эту конкретную строку с этими двумя псевдо-таблицами? EDIT: Я забыл обновить триггер! Кажется, работа, спасибо! –

+0

Распечатайте все полученные значения и посмотрите, что они находятся в 'вставленном' и' deleted', чтобы узнать, что произошло. Кроме того, для UPDATE будет существовать запись в псевдофайлах 'deleted' * и *' insert', одна из которых имеет старые значения, а другая - с обновленными значениями. –

0

использование

SET @StateId = (SELECT LeaveRequest.LeaveRequestStateId FROM Inserted) 

для получения дополнительной справки Trigger insert. Для вас беспокойства по поводу возвращения нескольких строк, перейдите по этой ссылке, которая показывает how to join the psuedotables to get single row