0

我正在使用 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 必须是字符串文字。

我该如何解决这个问题?

4

1 回答 1

1

您需要使用 SQL Server 2017+。如文档中所述,在SQL Server 2017 (14.x) 和 Azure SQL 数据库中,您可以提供一个变量作为 path 的值。但即便如此,我认为这N'strict $[sql:variable(@x)]."FieldName"'不是一个有效pathJSON_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
于 2020-09-29T07:36:47.563 回答