如何在SQL Server 2008中获取最近更新行的ID

3

我有一个要求,需要获取表中最后更新行的ID,并将此ID用于其他操作。

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

那么,是否有像scope_identity和@@identity(它们可以给出最后插入的行ID)的函数也适用于Update呢?

请帮我解决此问题。


6
是时候创建这样的列了。顺便说一句,scope_identity仅适用于此范围,而不是两天后,因此它也不能替代CreatedAt列。 - Tim Schmelter
你无法按行/列基础检索最后更新的信息,但是你可以在表级别获取此信息,请参考[链接][1]。然而我认为这对你没有用,最好的解决方案是创建一个表来存储更新详细信息,如用户ID、日期时间等。 [1]: http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/ - Suraj Singh
3个回答

12

你可以像这样做

declare @mytable as TABLE
    (
      Id int
    )

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

 Select Id from @mytable

9

由于您只对最后更新的ID感兴趣,因此您可以在SET子句中将其分配给一个变量:

DECLARE @LastID INT = NULL

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

太棒了,我从未想过可以用更新后的行值设置变量。谢谢。 - Ronen Festinger

0

我认为你应该寻找触发器。选择“插入/更新后”触发器。它将始终为你提供来自名为插入的动态表中的最后一个插入/更新记录...

查询:

从插入的表中选择*。并获取所需字段。


可以工作,但触发器不是一个好的永久解决方案。你(或其他人)会忘记它们的存在,最多会导致混淆。为什么不使用一个简单的存储过程来更新表并完成其他工作呢?戒掉的坏习惯:滥用触发器 - Tim Schmelter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接