2013-12-11 45 views
-4

有没有什么办法可以在更新语句之后获得最大的主键值?sql select最大更新的主键

我有一个C#函数取像,表名参数和值更新表。它生成一个动态的sql语句并执行它。所以当我运行函数,如果有插入它返回我最后插入的id作为int,没有问题,但如果有更新,那么我不能得到最大的表更新id。

例如我有一个像表; RowId的,姓名,姓氏

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

最后?按什么顺序?没有命令,问题就没有意义了。 –

+0

你有没有updated_time专栏? –

+0

@SamD是的,但我想找到一个适用于所有更新语句的查询,而不是单个选择。 –

回答

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

尝试用

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

我甚至不知道这句法记录,但我我不知道如何保证它会给更新的id的“最大”值,在多行受到影响的情况下。 [这是一个破案](http://sqlfiddle.com/#!3/a8dcd/1)。 –

+0

@AaronBertrand - 在Internet上有一个不太明显的角落,其中的语法记录为:[here](http://technet.microsoft.com/en-us/library/ms177523.aspx)。请再次阅读:_“语法记录的位置”_。语义通常是抢手的。您现在可以发布一条指向您的博客的链接,但不包含语法。 – HABO

1

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

然后,你可以操纵这不过你想要的。

但我看不出知道“最后”,甚至最大的主要更新的密钥的有效性。也许你可以解释为什么你需要这个?

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

+0

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