JSON_VALUE 不采用动态 JSON 路径
JSON_VALUE does not take dynamic JSON path
我正在使用 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"')
错误:
The argument 2 of the "JSON_VALUE or JSON_QUERY" must be a string
literal.
我该如何解决这个问题?
您需要使用 SQL Server 2017+。正如 documentation 中提到的,在 SQL Server 2017 (14.x) 和 Azure SQL 数据库中,您可以提供一个变量作为值路径。但即使那样,我也不认为 N'strict $[sql:variable(@x)]."FieldName"'
是 JSON_VALUE()
调用的有效 path
表达式。
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
我正在使用 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"')
错误:
The argument 2 of the "JSON_VALUE or JSON_QUERY" must be a string literal.
我该如何解决这个问题?
您需要使用 SQL Server 2017+。正如 documentation 中提到的,在 SQL Server 2017 (14.x) 和 Azure SQL 数据库中,您可以提供一个变量作为值路径。但即使那样,我也不认为 N'strict $[sql:variable(@x)]."FieldName"'
是 JSON_VALUE()
调用的有效 path
表达式。
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