在尝试将其转换为合法时间时,我经常看到这种转换:
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
请参阅在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)