我有一个存储过程,除其他外,它会在循环内的不同表中插入一些内容。请参阅下面的示例以获得更清晰的理解:
INSERT INTO T1 VALUES ('something')
SET @MyID = Scope_Identity()
... some stuff go here
INSERT INTO T2 VALUES (@MyID, 'something else')
... The rest of the procedure
这两个表(T1 和 T2)各有一个 IDENTITY(1, 1) 列,我们称它们为 ID1 和 ID2;但是,在我们的生产数据库(非常繁忙的数据库)中运行该过程并在每个表中有超过 6250 条记录后,我注意到 ID1 与 ID2 不匹配的事件!尽管通常对于插入到 T1 中的每条记录,在 T2 中都插入了记录,并且两者中的标识列都一致地递增。
“错误”的记录是这样的:
ID1 Col1
---- ---------
4709 data-4709
4710 data-4710
ID2 ID1 Col1
---- ---- ---------
4709 4710 data-4710
4710 4709 data-4709
注意第二个表中的“倒置”ID1。
对SQL Server底层操作了解不多,我提出了以下“理论”,也许有人可以纠正我。
我认为是因为循环比物理写入表更快,和/或可能其他一些事情延迟了写入过程,所以记录被缓冲了。到了写它们的时候,它们的写法没有特别的顺序。
如果没有,那是否可能,如何解释上述情况?
如果是,那么我还有另一个问题要提出。如果第一次插入(来自上面的代码)被延迟了怎么办?这是否意味着我不会获得正确的 IDENTITY 插入第二个表?如果这个答案也是肯定的,我该怎么做才能确保两个表中的插入会以正确的 IDENTITY 顺序发生?
我感谢任何有助于我理解这一点的评论和信息。
提前致谢。