Sql server SQL Server-并行事务生成PK字段值的顺序

Sql server SQL Server-并行事务生成PK字段值的顺序,sql-server,transactions,primary-key,isolation-level,Sql Server,Transactions,Primary Key,Isolation Level,我有两个线程同时更新表A。每个线程更新自己的行范围,因为它们没有交点。每个线程在读未提交事务中工作。表A上有一个更新后触发器,它将记录添加到表B中。表B具有BIGINT主键。表B上的记录将按哪个顺序添加?第一个事务生成的记录是否可能与第二个事务生成的记录混合,或者总是一个事务写入其数据,而第二个事务仅在此之后写入 我的意思是,当第一个事务完成时,表B中的行的PK值可能为3,6,8,9,而当第二个事务完成时,会添加PK值4,5,7,10吗?或者第一个事务生成的PK值范围不会与第二个事务生成的值混合

我有两个线程同时更新表A。每个线程更新自己的行范围,因为它们没有交点。每个线程在读未提交事务中工作。表A上有一个更新后触发器,它将记录添加到表B中。表B具有BIGINT主键。表B上的记录将按哪个顺序添加?第一个事务生成的记录是否可能与第二个事务生成的记录混合,或者总是一个事务写入其数据,而第二个事务仅在此之后写入


我的意思是,当第一个事务完成时,表B中的行的PK值可能为3,6,8,9,而当第二个事务完成时,会添加PK值4,5,7,10吗?或者第一个事务生成的PK值范围不会与第二个事务生成的值混合?从表B读取的事务已被读取提交

如果在更新表A中的记录后,事务有其他操作,则确认该事务是可能的。但使用单个更新命令是不可能的。事务1更新表A中的行,从而触发将行插入表B。生成了第一个标识范围,例如5-10。然后事务2更新表B中的行,从而触发将行插入表B。生成第二个标识范围,例如11-15。两个事务都将继续执行。如果第二个事务在第一个事务之前完成并提交,则标识范围11-15似乎在范围5-10之前提交。

如果这些是自动编号列a.k.a.标识,则我认为对其值进行任何假设都是错误的。它们应该被视为不透明的斑点,恰好与数字列的位数相同,但不应该处理它们的值。为什么这是一个错误?MSDN文档描述了IDENTITY seed、increment提供种子初始值和增量步骤。我使用了IDENTITY1,1,因此我希望两个连续值之间的差值是1,这在你的评论中是一个常见的例子。身份值可能会跳过一个值,甚至几千个值,这可能有多种原因——在这里搜索大量关于这个的问题——而试图解决这个问题以便没有差距是昂贵的。如果您不需要没有间隙的连续值,那么IDENTITY是一个很好的解决方案。请告诉我您没有使用read uncommitted进行更新。你可以也将最终导致索引损坏。标识值有间隙是可以的。但我需要下一个值大于上一个值。所以我想知道是否有可能两个事务同时生成标识,或者第一个事务将锁定表,直到提交或回滚为止?