0

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

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

Row1
Row2
Row3
Row4
Row5
Row6

或者可能是这样的?

Row1
Row6
Row3
Row5
Row4
Row2
4

1 回答 1

7

您正在犯在表格中假设顺序的常见谬误。表没有顺序。只有结果有顺序,除非指定了明确的 ORDER BY,否则它是不确定的。

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

记录一下:身份是按照操作获取日志流访问权的顺序生成的。

于 2012-09-25T07:30:01.210 回答