有没有办法在更新语句后获取表的最大主键值?
我有一个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
答案 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'