问题描述
我正在使用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