Извлечение значения из строки JSON вызывает сообщение об ошибке T-SQL - PullRequest
0 голосов
/ 09 мая 2019

Ситуация:

Я пытаюсь присоединить таблицу с идентификаторами к другой таблице с идентификаторами и столбцом, который хранится в значении base64.Я расшифровал его и использовал функции JSON для извлечения значения из ключа 'a' строки JSON.Я получил известное сообщение об ошибке:

Текст JSON неправильно отформатирован.Неожиданный символ '(' находится в позиции 1.

После просмотра похожих ошибок в Интернете я добавил ISJSON() > 0, так как он должен исключить сообщение об ошибке - но это не так.

SELECT 
    u.ids,
    base2.ExtractedValue
FROM #ids AS u
INNER JOIN (
        SELECT base.Ids, JSON_VALUE(base.Base64Decoded, '$.a') as ExtractedValue
        FROM (
                SELECT 
                    ids,
                    convert(
                        varchar(MAX),
                        CAST('' AS xml).value('xs:base64Binary(sql:column("value"))', 'VARBINARY(MAX)')
                        ) AS Base64Decoded
                FROM base64info
                ) AS base
        WHERE ISJSON(base.Base64Decoded) > 0 
            AND base.Base64Decoded is not null
        ) AS base2 ON u.ids=base2.ids
WHERE base2.ExtractedValue IS NOT NULL 

Что он делает не так?

1 Ответ

0 голосов
/ 10 мая 2019

Оператор case решает проблему следующим образом:

CASE WHEN ISJSON(base.Base64Decoded) = 1 THEN JSON_VALUE(base.Base64Decoded, '$.a') END as ExtractedValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...