从JSON字符串中提取值会引发错误消息T-SQL

时间:2019-05-09 16:38:39

标签: sql json sql-server base64

情况:

我正在尝试将具有ID的表与具有ID和存储在base64值中的列的另一个表联接。我对其进行了解码,并使用JSON函数从JSON字符串的键'a'中提取了一个值。我收到了著名的错误消息:

  

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 :(得分:0)

一个案例声明解决了这个问题:

CASE WHEN ISJSON(base.Base64Decoded) = 1 THEN JSON_VALUE(base.Base64Decoded, '$.a') END as ExtractedValue