这可能是
我没有看到的愚蠢的东西,但我无法设法让JSON_VALUE
或JSON_QUERY
按照我期望的那样工作:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT *
FROM OPENJSON(@json)
返回正确的 3 行。
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json
, JSON_VALUE(@json, '$') label
, JSON_QUERY(@json, '$') label2
返回 1 行,但label
NULL
,label2
显示整个字符串。好的,但是:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json
, JSON_VALUE(@json, '$.1031') label
, JSON_QUERY(@json, '$.1033') label2
返回 0 行。
编辑
我确实希望得到这样的结果:
is_json, label, label2
1, test-de, test-en
由于您的密钥以数字开头,因此您需要将其引号。我认为你所追求的是:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) AS is_json,
JSON_VALUE(@json, '$."1031"') AS label,
JSON_VALUE(@json, '$."1033"') AS label2;
或者,您可以使用WITH
:
DECLARE @json nvarchar(max) = N'{"1031":"test-de","1033":"test-en","1036":"test-fr"}'
SELECT ISJSON(@json) is_json,
J.label1,
J.label2
FROM OPENJSON(@json)
WITH (label1 varchar(7) '$."1031"',
label2 varchar(7) '$."1033"') J;