SQL Server如何在标识列中生成值?

时间:2012-09-25 06:37:17

标签: sql-server sql-server-2008 tsql identity-column

我的问题是,如果我将两个批量插入并行放入一个表中,SQL Server如何创建标识值?

我的意思是,如果在一个会话中我插入多行(Row1-Row2-Row3)并同时另一个会话同时插入多行(Row4-Row5-Row6),结果会是这样的?

Row1
Row2
Row3
Row4
Row5
Row6

或者类似的东西?

Row1
Row6
Row3
Row5
Row4
Row2

1 个答案:

答案 0 :(得分:7)

你正在制定表中订单的常见谬误。表没有订单。只有结果才有顺序,除非指定了明确的ORDER BY,否则顺序不确定。

您可能会问一个不同的问题:在并发插入的情况下,如何分配身份生成值?答案很简单:没关系。如果您对订单做出任何假设,那么您的代码就会被破坏。差距也是如此。即使生成的身份完全是随机的,您的应用程序也应该正常工作,如果身份完全随机,正确编写的应用程序工作。使用SCOPE_IDENTITY()检索最后插入的标识。更好的是,使用INSERT的{​​{3}}子句,它也适用于多行插入。

记录:身份是按照操作获取OUTPUT访问权限的顺序生成的。