根据文档,sql服务器中SYSDATETIME()函数的精度约为100纳秒。 我已经看到,就像GETDATE()一样,SYSDATETIME函数在事务中也返回相同的结果。而且,时间在用GO分隔的两批中是不同的。
现在我真正的问题是,是否可以安全地假设两个事务始终具有不同的SYSDATETIME,无论它们在同一服务器/数据库实例中可以达到的并发程度如何,无论服务器具有多少内核/硬件?
背景:我正在尝试使用临时表对现有数据库进行审计。我们已经在所有表中按列修改了。但是我们无法确定谁使用时态表删除了一条记录。因此,我正在考虑将用户ID(最终用户ID)转储到所有事务的表中。因此,如果时间与时态表匹配,我也许可以根据日期时间识别用户。
答案 0 :(得分:1)
首先,我需要通知您GETDATE()
和SYSDATETIME
给出了不同的日期时间格式。 SYSDATETIME()
将为您提供以下结果-2019-06-03 16:11:07.3683245
和GETDATE()
将为2019-06-03 16:11:07.367
。现在,您需要在一个表中添加两列,用户可以在其中更新记录以及更新时间。而且,如果您在更新临时表和更新主表之间没有使用任何耗时的过程,那么它将获得相同的时间。但是,如果有任何原因,更新两个记录都需要时间,而两个表中的时间可能不同。
您可以在Declare
中使用sql
方法在两个表中使用相同的datetime
。没问题,它将在不同时间更新。您可以使用Declare
方法来获得datetime
,如下所示。
Declare @date Datetime2 = SYSDATETIME()
Select @Date
在查询中更新datetime
时可以使用@Date。
我希望它能起作用。