sql选择最大更新主键

sql选择最大更新主键,sql,sql-server,primary-key,Sql,Sql Server,Primary Key,update语句之后是否有任何方法可以获得表的最大主键值 我有一个C函数,它接受参数,如表名和值来更新表。它生成一个动态sql语句并执行它。所以当我运行函数时,若有一个insert,它会将最后一个插入的id返回int,这并没有问题,但若有更新,那个么我就无法获得表的最大更新id 例如,我有一张像桌子一样的桌子;RowId,Name,Lastname -- this statement may update multiple rows Update Person set name = 'sampl

update语句之后是否有任何方法可以获得表的最大主键值


我有一个C函数,它接受参数,如表名和值来更新表。它生成一个动态sql语句并执行它。所以当我运行函数时,若有一个insert,它会将最后一个插入的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 
试一试

UPDATE Person
SET name = 'sample name', @lastUpdatedId = id
WHERE name = 'name' and lastname = 'lastname'
可以使用该子句将更新的所有行输出到表变量中

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

但我看不出知道“最后一个”甚至是最大的主键更新有什么用处。也许你可以解释一下你为什么需要这个


另外,您的问题意味着您正在使用一个自然键作为表的主键。我会使用代理密钥。使用整数标识列作为主键。

不100%确定为什么要这样做,请进一步解释。但是,我会使用输出语法。例如:

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

您将得到一个名为@UpdatedDS的变量表,然后从刚刚更新的行中选择MAX ID。

Last?按什么顺序?如果没有顺序,这个问题就没有意义了。你有更新的时间列吗?@SamD是的,我有,但我想找到一个查询,该查询将适用于所有更新语句,而不是单个select语句。@MitchWheat最大主键已更新。上次更新的biggestI我有一个C函数,它使用参数,如表名和值来更新表。它生成一个动态sql语句并执行它。因此,当我运行函数时,如果有一个insert,它会将上次插入的id返回为int,这没有问题,但如果有更新,则无法获取表的上次更新id。我甚至不确定是否记录了此语法,但我不确定如何保证它将给出更新的id的最大值,在多行受影响的情况下@AaronBertrand-互联网上有一个模糊的角落,其中记录了语法:。请再读一遍:语法记录在哪里。语义学一般都是可以掌握的。您现在可以发布一个链接到您的博客,该链接取消了语法记录。