2013-11-02 43 views
0

我遇到了問題。我使用SQL Server 2008 Express。ident_current顯示錯誤的最後插入的ID

將新行插入表中時,IDENT_CURRENT函數會返回正確的值(上次插入的行ID)。但是當最後插入的行被刪除時(DELETE FROM REPORT WHERE ID='last_inserted_id'IDENT_CURRENT函數返回刪除行的id。它不更新。

我需要從表中返回最後一個id。

SELECT IDENT_CURRENT('report') 
+0

'IDENT_CURRENT'工作得很好 - 這是你的期望是錯誤的。 SQL Server中的身份值是**從不「再循環」 - 一旦發佈,它們就消失了,永遠不會被重用。 –

+0

謝謝。得到它了。如何在任何會話和任何範圍內獲取最後一行ID? – jakentus

+0

你需要什麼信息?身份是**每桌** - 所以這樣一個「全球」最高行ID實際上似乎不是很有用.... –

回答

2

這是按預期工作。該函數返回使用的最後一個標識值,即使它已被刪除。以下是Microsoft的文檔摘錄:

IDENT_CURRENT返回爲任何會話和任何作用域中的特定表生成的最後一個標識值。

+0

謝謝。那麼如何獲得最新的當前ID? – jakentus

+0

您可能想要使用SCOPE_IDENTITY。這裏是MS文檔的鏈接http://technet.microsoft.com/en-us/library/ms175098.aspx –

+0

如果你想捕獲被刪除行的id,你可能需要添加一個觸發器到桌上。 –

1

身份總是上升。如果刪除行,它不會停止。另外,它可以在值上有'空白'。 閱讀詳細信息http://technet.microsoft.com/en-us/library/ms186775.aspx

+0

謝謝。那麼如何在任何會話和作用域中獲取最後一行ID?我給@Brian Shamblen寫了一個例子。恩。在一個ID分別爲[1,'a'],[2,'b'],[3,'c']的表中獲得了樹行。如果你得到最後一行id,那麼它是3.現在,刪除最後一行並得到最後一行id,所以它是2.如何實現它?謝謝 – jakentus

+0

也許如果你描述你的問題的目的,它會更容易回答。 SELECT max(id)返回當前的最後一行。 SELECT @@ IDENTITY返回在上次插入操作期間生成的id。我無法捕捉到你想要獲得什麼價值,這是目的。 – unconnected

0

如果你想最大的ID,你可以在你的表格發現,只要使用

SELECT MAX(ID) FROM table