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

Grafana查询中使用仪表盘变量声明SQL变量报错的求助

问题分析与解决

错误的直接原因是Grafana变量$PC未被正确引号包裹,导致SQL Server无法识别它为字符串字面量,进而使@pcFilter变量的声明失败(因为前面的DECLARE @PC语句语法错误,后续代码未执行)。

修正步骤

  1. 正确引用Grafana变量:
    在SQL中给@PC赋值时,使用Grafana的${PC:sqlstring}格式,它会自动将变量值包裹为合法的SQL字符串(包含单引号,且转义内部的单引号)。

  2. 验证动态参数传递:
    确保sp_executesql的参数定义和传递正确,这部分你的代码已经是对的。

修正后的完整SQL代码

DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
DECLARE @PC AS NVARCHAR(255) = ${PC:sqlstring}; -- 修正:使用sqlstring格式包裹变量
DECLARE @pcFilter AS NVARCHAR(255) = '%' + @PC + '%'

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(PC)
                   FROM DATOS_GENERALES DG INNER JOIN OPERACION_MANUAL OM ON DG.RefId = OM.RefId
                   WHERE TimeStamp_UTC IS NOT NULL AND PC LIKE @pcFilter
                        FOR XML PATH(''), TYPE
                        ).value('.', 'NVARCHAR(MAX)') 
                        ,1,1,'')

SET @query = 'SELECT Fecha, ' + @cols + ' FROM
            (SELECT PC, CONVERT(NVARCHAR(8), TimeStamp_UTC, 112) AS Fecha, 
            (TiempoTest + 2 * Tiempo)/3600 AS TiempoTotal
            FROM DATOS_GENERALES DG INNER JOIN OPERACION_MANUAL OM ON DG.RefId = OM.RefId
            WHERE TimeStamp_UTC IS NOT NULL AND PC LIKE @pcFilter) AS A
            PIVOT
            (
                SUM(TiempoTotal) FOR PC IN (' + @cols + ')
            ) AS P
            ORDER BY Fecha DESC'

EXECUTE sp_executesql @query, N'@pcFilter nvarchar(255)', @pcFilter = @pcFilter 

额外说明(针对多值变量场景)

如果你的PC变量允许多选(Multi-value),上述代码仍无法正常工作,因为@PC只能存储单个值。此时需要修改逻辑:

  • 使用Grafana的${PC:csv}格式获取逗号分隔的字符串
  • 将字符串拆分为表变量,再用IN或EXISTS替代LIKE进行过滤

内容的提问来源于stack exchange,提问作者Jose Mari Muguruza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:22:09