sqlserver查询出自增字段的下一个值

来源:互联网 发布:spss for mac 23 编辑:程序博客网 时间:2024/05/01 05:26
通常我们在设计表的时候,会加一个排序字段,为的是方便数据的排序,比如上移、下移。如果在给数据表插入数据的时候,想要使这个字段的默认值跟数据库的主键(主键是自增长)一致的话,该怎么弄呢?先插入,然后取出刚刚插入的数据的主键,然后对这行数据更新,将排序的值更新为主键的值?理论上这样做也能实现,但是如果并发量大的情况这样做就不划算了。这时候我们可以用到一个sql的函数ident_current,如下:
INSERT INTO tab (c1,c2,c3) values ('aa','bb',ident_current('tab'))
      这个sql 命令是对tab表插入3列 分别是c1 c2 c3,对应的值分别是aa bb 和ident_current('tab'),ident_current('tab') 取出的就是tab表的主键.
  一个函数,简简单单的就完成了开篇是分析的逻辑.
sql server 2005 帮助文档参考:
IDENT_CURRENT 类似于 SQL Server 2000 标识函数 SCOPE_IDENTITY 和 @@IDENTITY。这三个函数都返回最后生成的标识值。但是,上述每个函数中定义的“最后”的作用域和会话有所不同。
IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
 IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值
@@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。




SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。




在空表中调用 IDENT_CURRENT 函数时,此函数将返回 NULL。
如果语句和事务失败,它们会更改表的当前标识,从而使标识列中的值出现不连贯现象。即使未提交试图向表中插入值的事务,也永远无法回滚标识值。例如,如果因 IGNORE_DUP_KEY 冲突而导致 INSERT 语句失败,表的当前标识值仍然会增加。
0 0