如何为触发器选择正确的行

时间:2015-12-03 08:14:17

标签: sql sql-server sql-server-2008 triggers

我是Stored过程和触发器的新手。在针对特定行执行UPDATELeaveRequest表后,我有以下触发器:

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如何UPDATEUPDATE d?

说我的user = kade用于id = 55,而1) foo=foo => foo=bar 2) foo = foo => foo=bar (whitespace before "=") 3) (foo)=foo => (bar)=bar ("=" is not just after "foo") 我可以在触发器中选择同一行吗?

2 个答案:

答案 0 :(得分:1)

在触发器内部有一些名为DELETEDINSERTED的伪表,您可以在那里获取更新的ID。请注意,在一般情况下,一个查询中可能会有多个行更新,因此您可能会在DELETEDINSERTED伪表中获得多行。

答案 1 :(得分:0)

使用

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

了解更多参考资料Trigger insert。 如果您担心返回多行,请点击此链接显示how to join the psuedotables to get single row