我的问题是,如果我将两个批量插入并行放入一个表中,SQL Server如何创建标识值?
我的意思是,如果在一个会话中我插入多行(Row1-Row2-Row3)并同时另一个会话同时插入多行(Row4-Row5-Row6),结果会是这样的?
Row1
Row2
Row3
Row4
Row5
Row6
或者类似的东西?
Row1
Row6
Row3
Row5
Row4
Row2
答案 0 :(得分:7)
你正在制定表中订单的常见谬误。表没有订单。只有结果才有顺序,除非指定了明确的ORDER BY,否则顺序不确定。
您可能会问一个不同的问题:在并发插入的情况下,如何分配身份生成值?答案很简单:没关系。如果您对订单做出任何假设,那么您的代码就会被破坏。差距也是如此。即使生成的身份完全是随机的,您的应用程序也应该正常工作,如果身份完全随机,正确编写的应用程序将工作。使用SCOPE_IDENTITY()
检索最后插入的标识。更好的是,使用INSERT
的{{3}}子句,它也适用于多行插入。
记录:身份是按照操作获取OUTPUT
访问权限的顺序生成的。