You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询实现Time列逐行递增1秒(不使用临时表)方法咨询

修改后可直接使用的SQL脚本

无需临时表、无需游标,单条查询即可满足Time列逐行递增1秒的要求,适配Zabbix采集场景:

SELECT
    DATEADD(SECOND, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) - 1, GETDATE()) AS Time,
    r.session_id,
    r.cpu_time,
    p.physical_io,
    t.text,
    SUBSTRING(t.text, r.statement_start_offset/2 + 1, 
        CASE WHEN r.statement_end_offset = -1 THEN LEN(t.text) 
        ELSE (r.statement_end_offset - r.statement_start_offset)/2 END
    ) AS text_running,
    p.blocked,
    DB_NAME(p.dbid) AS dbname,
    r.status AS request_status,
    r.command,
    r.start_time,
    r.wait_type AS request_wait_type,
    p.waitresource,
    p.status AS process_status,
    p.open_tran,
    p.loginame,         
    p.hostname,
    p.program_name,
    r.percent_complete,
    r.last_wait_type,
    p.waittime
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
INNER JOIN sys.sysprocesses p ON p.spid = r.session_id
关键调整说明
  • 移除原脚本中完全无效的游标逻辑:原脚本游标仅循环执行fetch操作,未定义变量接收fetch结果、也未做任何结果输出,执行后不会返回任何数据集,根本无法满足Zabbix采集要求
  • Time列实现逻辑:通过ROW_NUMBER() OVER(ORDER BY (SELECT NULL))为结果集生成从1开始的连续行号,用DATEADD函数基于查询触发时的基准时间逐行累加1秒,第一行Time为查询执行的当前时间,后续每行依次+1秒,完全匹配需求
  • 修正原查询的列问题:删除了重复选取的r.wait_type列,给来自sys.dm_exec_requests和sys.sysprocesses的重名status、wait_type列加了明确别名,避免Zabbix采集、Grafana可视化时出现列名冲突
  • 行号生成用ORDER BY (SELECT NULL)写法,跳过不必要的排序开销,不会对系统DMV查询造成额外性能影响

内容的提问来源于stack exchange,提问作者Tonn12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:36:25