JSON_VALUE不采用动态JSON路径

问题描述

我正在使用sql Server 2016。

这很正常:

SELECT JSON_VALUE(N'[{"FieldName":"xyz"}]',N'strict $[0]."FieldName"')

这会重新运行错误

DECLARE @x nvarchar(100)
SET @x =N'0'

SELECT JSON_VALUE(N'[{"FieldName":"xyz"}]',N'strict $['+@x+']."FieldName"')

SELECT JSON_VALUE(N'[{"FieldName":"xyz"}]',N'strict $[sql:variable(@x)]."FieldName"')

错误

“ JSON_VALUE或JSON_QUERY”的参数2必须为字符串 文字

我该如何解决

解决方法

您需要使用SQL Server 2017+。如documentation中所述,在 SQL Server 2017(14.x)和Azure SQL数据库中,您可以提供一个变量作为path 的值。但是即使那样,我也不认为N'strict $[sql:variable(@x)]."FieldName"'path通话的有效JSON_VALUE()表达式。

SQL Server 2017+的工作示例:

DECLARE @x nvarchar(100)
SET @x = N'0'

SELECT JSON_VALUE(N'[{"FieldName":"xyz"}]',N'strict $[' + @x + ']."FieldName"')

对于SQL Server 2016,您可以尝试以下操作:

DECLARE @json nvarchar(100) = N'[{"FieldName":"xyz"}]'
DECLARE @x nvarchar(100) = N'0'

SELECT JSON_VALUE([value],'$.FieldName')
FROM OPENJSON(@json) j1
WHERE [key] = @x