Sql server sys.dm_传输当前事务。事务id的唯一性如何

Sql server sys.dm_传输当前事务。事务id的唯一性如何,sql-server,Sql Server,我正在审计触发器中从sys.dm_tran_current_事务捕获事务\u id。我想知道的是事务id的唯一性。文档中只显示“当前快照的事务id” 我只能假设此“ID”将在以后重新使用,但我希望对此进行确认。 @abcdefghi的答案是好的,但只是补充一下 事务\u id在事务中是相同的 在显式事务之外,每个批的事务id都会更新 服务器重置时,事务\u id重置,因此随着时间的推移,您将遇到相同的事务\u id 这导致您不能在审计表中使用事务_id,因为这种情况 插入的审核记录带有事务处

我正在审计触发器中从sys.dm_tran_current_事务捕获事务\u id。我想知道的是事务id的唯一性。文档中只显示“当前快照的事务id”

我只能假设此“ID”将在以后重新使用,但我希望对此进行确认。


@abcdefghi的答案是好的,但只是补充一下

  • 事务\u id在事务中是相同的
  • 在显式事务之外,每个批的事务id都会更新
  • 服务器重置时,事务\u id重置,因此随着时间的推移,您将遇到相同的事务\u id
这导致您不能在审计表中使用事务_id,因为这种情况

插入的审核记录带有事务处理\u id=42 sql server重置 ... 执行了41个新批。。。 插入的审核记录带有事务处理\u id=42


此外,您不能像使用时间戳一样使用事务id(更高的值并不意味着以后的更改,你也不能说相同的ID意味着相同的事务。

有趣的问题,我不认为ID会被重复使用,你会注意到。事务ID是一个bigint,可以高达9223372036854775807。它似乎只会递增。@Zhenny,请不要这样做e表示该ID将被重用。事务\u ID在SQL重新启动时重置。这并不表明事务ID是唯一的或不唯一的。这与此问题无关。我同意。数据类型是bigint这一事实很有帮助,但似乎没有任何文档说明该事务ID在d的生命周期内是唯一的服务器重新启动后,atabase.Transaction\u id将在0处重新启动。感谢@abcdefghi在执行SQL server重新启动并记录新事务后,事务\u id接近零,而上次审核的事务\u id之前的值为200万。