下一个IDENT_CURRENT

时间:2016-11-27 06:34:42

标签: sql-server tsql

我想获得下一个IDENT_CURRENT的数字 我用过

select IDENT_CURRENT ('Header') + 1

但是当桌子为空时,这个给了我value = '2' 当我使用

select IDENT_CURRENT ('Header') 

它将在两种情况下给出value = '1',第一种是表为空时,第二种是当表有一条记录时。 这种情况有什么解决方案,或者我必须使用其他方法吗? Header Table

表格:

create table Header (
    VhrNum int primary key identity (1,1),
    Date varchar(50),
    TotVhr varchar (50),
    TotQTY Varchar(50)
)

1 个答案:

答案 0 :(得分:1)

由于错误或约束违规等原因,可能会回滚在Header表中插入行的事务。该事务将分配一定范围的ID,并且在回滚时将不使用该范围(即,将不提交行并且不使用ID)。这会在VhrNum列中留下空白。因此,无法知道下一个身份ID是什么。

有关身份列的一些内容,您应该知道并在the documentation of the IDENTITY property中明确说明。我引用相关的子弹作为参考:

  

列上的标识属性保证以下内容:

     
      
  • 事务中的连续值 - 插入多行的事务不能保证获得行的连续值[...]

  •   
  • 服务器重启或其他故障后的连续值[...]

  •   
  • 重用值 - 对于具有特定种子/增量的给定标识属性,引擎不会重用标识值。如果特定的insert语句失败或者回滚insert语句,则消耗的标识值将丢失,并且不会再次生成。生成后续标识值时,这可能会导致间隙。

  •   

对于标识列,您永远不应该依赖下一个值。没有办法知道这个价值是多少。