我有一张桌子int identity
作为PK。有什么东西导致它增加,我想知道那是什么。
举个简单的例子,昨天我插入了一条记录并得到了 ID 41,773。今天我插入了一条新记录,得到了 ID 44,898。这些之间没有带 ID 的记录。
有很多应用程序可以访问数据库,所以我正在检查它们的日志是否有错误;但是,我想知道是否有一种方法可以在不插入记录的情况下找出导致 IDENTITY 增加的查询。
这张表上也没有明确的删除,所以我知道它不是插入 + 删除组合,导致这种情况,它一定是失败了。
我有一张桌子int identity
作为PK。有什么东西导致它增加,我想知道那是什么。
举个简单的例子,昨天我插入了一条记录并得到了 ID 41,773。今天我插入了一条新记录,得到了 ID 44,898。这些之间没有带 ID 的记录。
有很多应用程序可以访问数据库,所以我正在检查它们的日志是否有错误;但是,我想知道是否有一种方法可以在不插入记录的情况下找出导致 IDENTITY 增加的查询。
这张表上也没有明确的删除,所以我知道它不是插入 + 删除组合,导致这种情况,它一定是失败了。
基于 JNK 所做的测试,最有可能发生的情况是正在回滚的事务,但仍会导致种子增加。
最好的方法是跟踪(剖析)活动,以便您可以捕获违规交易。下面是使用 Profiler 的起点:
http://msdn.microsoft.com/en-us/library/ms181091.aspx
当您开始学习跟踪时,宁愿跟踪的次数少于您认为需要的次数。跟踪是“侵入性的”,如果您追求太多信息,您可能会危及数据库实例。
在这种情况下,您正在寻找基于交易的信息。如果您在设置跟踪时有具体问题,请随时回复。请注意,您可能希望登录到文件,除非您可以让 GUI 整夜保持运行状态。总体而言,记录到文件是首选,除非您试图实时捕获某些内容。
如果您开始一个事务,插入一行,然后回滚事务,标识值将增加。
我最初认为 Access 数据库可能是这方面的罪魁祸首,认为它的列默认检索功能可能会导致这种行为(如果您开始编辑新行但未保存就放弃了)。但是,我做了一些测试,在 MDB/ACCDB 的 ADP 和常规链接表中,它不会导致标识值的人为增加。