#sql-server #json-value
#sql-server #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"')
Ошибка:
Аргумент 2 «JSON_VALUE или JSON_QUERY» должен быть строковым литералом.
Как я могу это решить?
Комментарии:
1.
sql:variable()
Синтаксис не поддерживается ни в одной версии; это работает только для запросов XML.
Ответ №1:
Вам необходимо использовать SQL Server 2017 . Как упоминается в документации, в SQL Server 2017 (14.x) и в базе данных SQL Azure вы можете указать переменную в качестве значения 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