【问题标题】:ident_current shows wrong last inserted idident_current 显示错误的最后插入 id
【发布时间】:2013-11-02 06:00:01
【问题描述】:

我遇到了问题。我使用 SQL Server 2008 Express。

当新行插入到表中时,IDENT_CURRENT 函数返回正确的值(最后插入的行 ID)。但是当最后插入的行被删除(DELETE FROM REPORT WHERE ID='last_inserted_id')时,IDENT_CURRENT 函数返回被删除行的 id。它不更新。

我需要从表中返回最后一个 id。

SELECT IDENT_CURRENT('report')

【问题讨论】:

  • IDENT_CURRENT 工作得很好——你的期望是错误的。 SQL Server 中的标识值是从不“回收”的——一旦分发出去,它们就消失了,永远不会被重复使用。
  • 谢谢。知道了。如何在任何会话和任何范围内获取最后一行 ID?
  • 你需要这些信息做什么?标识是每个表 - 所以这样一个“全局”最高行 id 看起来真的不是很有用....
  • 感谢您的回复。我的意思是每桌。不是全球性的。如果最后一行被删除,身份将永远不会反转。但是当我从表中删除最后一行时,ident_current 会给我最后的身份。但我需要获取最后一行 ID。如示例:在具有 id`s 的表中分别获取树行:[1,'a'],[2,'b'],[3,'c']。如果你得到最后一行ID,那么它是3。现在,删除最后一行并获取最后一行ID,所以它是2。如何实现它?谢谢
  • SELECT MAX(Rowid) FROM dbo.YourTable ???

标签: sql sql-server sql-server-2008 last-insert-id


【解决方案1】:

这按预期工作。该函数返回最后使用的标识值,即使它已被删除。以下是 Microsoft 文档的摘录:

IDENT_CURRENT 返回为任何会话和任何范围内的特定表生成的最后一个标识值。

【讨论】:

  • 谢谢。那么如何获取最后一个当前id呢?
  • 您可能想要使用 SCOPE_IDENTITY。这是 MS 文档的链接 technet.microsoft.com/en-us/library/ms175098.aspx
  • 如果您尝试捕获被删除行的 id,您可能需要向表中添加触发器。
  • SCOPE_IDENTITY 返回为当前会话和当前范围内的任何表生成的最后一个标识值。需要在任何会话和任何范围内获取表的最后一行 id。前任。分别在 id`s 的表中获得树行:[1,'a'],[2,'b'],[3,'c']。如果你得到最后一行 id 那么它是 3。现在,删除最后一行并获取最后一行 id,所以它是 2。实际上很简单。如何实现?谢谢
【解决方案2】:

身份总是会上升。如果您删除行,它不会下降。另外,它的值可以有“空白”。 阅读本文了解详情http://technet.microsoft.com/en-us/library/ms186775.aspx

【讨论】:

  • 谢谢。那么如何在任何会话和范围中获取最后一行 ID?我给@Brian Shamblen 写了一个例子。前任。得到一个表中的树行,id 分别为:[1, 'a'],[2, 'b'],[3, 'c']。如果你得到最后一行ID,那么它是3。现在,删除最后一行并获取最后一行ID,所以它是2。如何实现它?谢谢
  • 也许如果你描述你的问题的目的,它会更容易回答。 SELECT max(id) 返回当前的最后一行。 SELECT @@IDENTITY 返回上次插入操作期间生成的 id。而且我无法理解您试图获得的价值及其目的。
【解决方案3】:

如果您想要在表格中找到的最大 ID,只需使用

SELECT MAX(ID) FROM table

【讨论】:

    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2016-06-15
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多