2013-11-25 26 views
1

我有一个要求,我希望获取表中最后一次更新的行的编号,并且我希望将此编号用于其他操作。如何在SQL Server 2008中获取上次更新的行的编号

我没有像UpdatedOn这样的列,以便我可以引用该列。

那么有没有像scope_identity和@@身份(这给了我最后插入的行id的id)更新的任何函数也。

请帮助我一样。

+6

时间创建这样一个专栏。顺便说一句,'scope_identity'works也只在这个范围内,而不是两天后,所以它也不会替换'CreatedAt'列。 –

+0

你不能在行/列的基础上检索最新的更新信息,但是你可以在表格级别获得这个信息,然后按照这个[link] [1],但是我认为它对你没用,最好的解决方案是创建存储你更新信息的表格像userId,datetime等[1]:http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/ –

回答

7

你可以做这样的事情

declare @mytable as TABLE 
    (
     Id int 
    ) 

Update Table Set Name='Nitin' 
OUTPUT INSERTED.Id into @mytable 
where LastName='Varpe' 

Select Id from @mytable 
0

我认为你应该寻找触发器。去插入/更新触发器后。它总是给你最后插入/更新的记录,从叫插入动态表...

查询:

Select * from Inserted.,让你需要的任何领域。

+0

可以工作,但触发器不是一个好的永久解决方案。你(或其他人)会忘记它们存在,最好导致混淆。为什么不使用简单的存储过程来更新表格,然后执行其他工作。 [坏习惯踢:滥用触发器](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-abusing-triggers.aspx) –

4

,因为你只在最后一个ID更新感兴趣,那么你可以简单地把它分配给一个变量SET子句中:

DECLARE @LastID INT = NULL 

UPDATE 
    SomeTable 
SET 
    SomeColumn = 'SomeValue', 
    @LastID = ID 
WHERE 
    SomeOtherColumn = 'SomeOtherValue' 
+0

伟大的解决方案,我会从来没有想过你可以用这种方式更新行值。谢谢。 –