Grafana连接SQL Server查询报错:AS关键字附近语法错误求助
解决Grafana 9.3.6连接SQL Server的查询语法错误及时间序列展示问题
问题分析
报错db query error: mssql: Incorrect syntax near the keyword 'AS'核心原因是$__time()宏在处理复杂时间表达式(而非直接列名)时,语法展开不符合SQL Server的语法要求,导致别名定义逻辑冲突。
修正后的查询语句
替换$__time()宏为手动指定时间列别名,优化WHERE条件并添加Grafana时间范围过滤逻辑,确保查询适配SQL Server语法且符合时间序列展示要求:
SELECT DK_KOD AS metric, DATEADD(HOUR, -3, MQ_TAR_ZMN) AS time, SUM(ADET) AS value FROM [MYDB].[dbo].[Sayi] WHERE DK_KOD = 'XYZ' AND TXN_KOD IN ('A', 'B', 'C', 'D', 'E', 'F', 'G') AND $__timeFilter(DATEADD(HOUR, -3, MQ_TAR_ZMN)) GROUP BY DK_KOD, DATEADD(HOUR, -3, MQ_TAR_ZMN) ORDER BY time
关键调整说明
- 移除
$__time()宏,手动将时间表达式别名设为time:Grafana默认识别time列为时间序列的X轴,彻底避免宏展开导致的语法冲突。 - 用
TXN_KOD IN (...)替代多个OR条件:简化查询结构,提升执行效率与可读性。 - 添加
$__timeFilter():让查询结果自动匹配Grafana面板选择的时间范围,避免返回全量数据。 - 显式指定
metric和value别名:适配Grafana时间序列面板的字段映射规则,确保数据正确渲染为时间曲线。
面板配置要点
在Grafana面板的Query选项卡中:
- 确认数据源为目标SQL Server实例。
- Format as下拉框选择
Time series。 - 若字段未自动识别,可手动在Fields配置中映射:将
time设为Time字段,value设为Value字段,metric设为Metric字段。
内容的提问来源于stack exchange,提问作者Halk Bank
相关产品推荐
相关产品推荐

