sql选择最大的更新主键

时间:2013-12-11 00:09:08

标签: sql sql-server primary-key

有没有办法在更新语句后获取表的最大主键值?

我有一个C#函数需要参数,如表名和值来更新表。它生成一个动态的sql语句并执行它。所以当我运行函数时,如果有一个插入它返回我最后插入的id为int,没有问题,但如果有更新,那么我无法获得该表的最大更新ID。

例如我有一张像; RowId,Name,Lastname

-- this statement may update multiple rows
Update Person
set name = 'sample name'
where name = 'name' and lastname = 'lastname'
-- get last updated rowid here 

3 个答案:

答案 0 :(得分:2)

不是100%肯定你为什么在此之后,能否进一步解释。但是,我使用OUTPUT语法。例如:

DECLARE @UpdatedIDs TABLE
(
    ID INT
)

-- this statement may update multiple rows
Update Person
set name = 'sample name'
OUTPUT INSERTED.ID INTO @UpdatedIDs
where name = 'name' and lastname = 'lastname'
-- get last updated rowid here 

SELECT MAX(ID) AS LastUpdatedID
FROM @UpdatedIDs

您最终会得到一个名为@UpdatedIDs的变量表,然后您可以从刚刚更新的行中选择MAX() ID。

答案 1 :(得分:1)

您可以使用OUTPUT子句输出已更新到表(变量)中的所有行。

然后你可以随心所欲地操纵它。

但是我没有看到知道'last'甚至最大的主键更新的有用性。也许你可以解释为什么需要这个?

此外,您的问题意味着您正在使用表的主键的自然键。我会使用代理键代替。使用整数IDENTITY列作为主键。

答案 2 :(得分:-1)

尝试

UPDATE Person
SET name = 'sample name', @lastUpdatedId = id
WHERE name = 'name' and lastname = 'lastname'