在 dm_os_ring_buffers 中转换时间戳

Why*_*age 3 sql-server t-sql

在尝试将其转换为合法时间时,我经常看到这种转换:

SELECT DATEADD (ms, -1 * ((s.cpu_ticks) - r.[timestamp]), GETDATE())
FROM sys.dm_os_ring_buffers r
                CROSS JOIN sys.dm_os_sys_info s
Run Code Online (Sandbox Code Playgroud)

我收到错误:

将表达式转换为数据类型 int 时出现算术溢出错误。

转换这个的正确公式是什么?

答案:ms_ticks

Tar*_*zer 7

请参阅在SQL Server 2008计算这篇文章。它也适用于 2012、2014 和 2016 年。

cpu_ticks 是在 SQL Server 2005 中使用的。

declare @ts_now bigint 

select @ts_now = ms_ticks from 

sys.dm_os_sys_info 

select record_id, dateadd (ms, (y.[timestamp] -@ts_now), GetDate())
...
Run Code Online (Sandbox Code Playgroud)