2个交易是否可能具有相同的SYSDATETIME结果

时间:2019-06-03 10:17:51

标签: sql-server-2012

根据文档,sql服务器中SYSDATETIME()函数的精度约为100纳秒。 我已经看到,就像GETDATE()一样,SYSDATETIME函数在事务中也返回相同的结果。而且,时间在用GO分隔的两批中是不同的。 现在我真正的问题是,是否可以安全地假设两个事务始终具有不同的SYSDATETIME,无论它们在同一服务器/数据库实例中可以达到的并发程度如何,无论服务器具有多少内核/硬件? 背景:我正在尝试使用临时表对现有数据库进行审计。我们已经在所有表中按列修改了。但是我们无法确定谁使用时态表删除了一条记录。因此,我正在考虑将用户ID(最终用户ID)转储到所有事务的表中。因此,如果时间与时态表匹配,我也许可以根据日期时间识别用户。

1 个答案:

答案 0 :(得分:1)

首先,我需要通知您GETDATE()SYSDATETIME给出了不同的日期时间格式。 SYSDATETIME()将为您提供以下结果-2019-06-03 16:11:07.3683245GETDATE()将为2019-06-03 16:11:07.367。现在,您需要在一个表中添加两列,用户可以在其中更新记录以及更新时间。而且,如果您在更新临时表和更新主表之间没有使用任何耗时的过程,那么它将获得相同的时间。但是,如果有任何原因,更新两个记录都需要时间,而两个表中的时间可能不同。

您可以在Declare中使用sql方法在两个表中使用相同的datetime。没问题,它将在不同时间更新。您可以使用Declare方法来获得datetime,如下所示。

Declare @date Datetime2 = SYSDATETIME()
Select @Date

在查询中更新datetime时可以使用@Date。

我希望它能起作用。