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