2013-12-11 79 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。 –