【问题标题】:Transact SQL - Get Identity?Transact SQL - 获取身份?
【发布时间】:2011-03-19 22:19:27
【问题描述】:

如何获取表的最后一个或下一个标识?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    SCOPE_IDENTITY (Transact-SQL)

    返回插入到同一范围内的标识列中的最后一个标识值。范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两条语句在同一个存储过程、函数或批处理中,则它们属于同一范围。

    关于这个问题的更多信息 - How Do You Tell What Next Identity Column Will Be?

    还有这个——SQL Identity (autonumber) is Incremented Even with a Transaction Rollback

    【讨论】:

    • 但我没有范围。我想从未使用的表中获取身份。
    • @bochur1 - 抱歉不明白你的评论,桌子怎么可能不用?
    • 好的。从我得到它的第一个链接:>>SELECT IDENT_CURRENT('mytable') + IDENT_INCR('mytable') FROM mytable
    • 仅供参考:我不会依赖序列总是相邻的;如果事务回滚,可能会出现间隙。但是对于基本的快照报告应该没问题。
    • @bochur1 - 希望你注意到使用 'ident_current' 的答案继续说它在所有情况下都不起作用。
    【解决方案2】:

    您还可以在 Management Studio 中使用以下方法查询表的当前 IDENTITY:

    DBCC CHECKIDENT('YourTable')
    

    但这并不能可靠地告诉您下一个 IDENTITY 将是什么 - 请不要尝试自己计算下一个 IDENTITY!让 SQL Server 处理它并在插入发生后使用 SCOPE_IDENTITY() 抓取它 - 只有那个才是相关的,真的。

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-06
      • 2014-10-07
      • 2014-11-14
      相关资源
      最近更新 更多