我想获得下一个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)
)
答案 0 :(得分:1)
由于错误或约束违规等原因,可能会回滚在Header
表中插入行的事务。该事务将分配一定范围的ID,并且在回滚时将不使用该范围(即,将不提交行并且不使用ID)。这会在VhrNum
列中留下空白。因此,无法知道下一个身份ID是什么。
有关身份列的一些内容,您应该知道并在the documentation of the IDENTITY property中明确说明。我引用相关的子弹作为参考:
列上的标识属性不保证以下内容:
事务中的连续值 - 插入多行的事务不能保证获得行的连续值[...]
服务器重启或其他故障后的连续值[...]
重用值 - 对于具有特定种子/增量的给定标识属性,引擎不会重用标识值。如果特定的insert语句失败或者回滚insert语句,则消耗的标识值将丢失,并且不会再次生成。生成后续标识值时,这可能会导致间隙。
对于标识列,您永远不应该依赖下一个值。没有办法知道这个价值是多少。