OPENJSON将值列转换为多行不起作用

时间:2019-09-27 07:27:19

标签: json tsql open-json

我有一个结构简单的JSON文件。我尝试将数据提取到该JSON文件之外的行中。

JSON文件开头为:

[{"result":
[{"country":"Germany",
  "parent":"xxxx",
"city":"Reitbrook",
"latitude":"",

我尝试了此代码,都成功。 查看最后3条语句及其结果。 我希望在SELECT的最后一条语句中有多个记录。 我究竟做错了什么?

DECLARE @details VARCHAR(MAX)

Select @details  =BulkColumn FROM OPENROWSET 
 (BULK 'folder/cmn_location',   DATA_SOURCE='blogstorage',    SINGLE_CLOB) as JSON;

IF (ISJSON(@details) = 1)
    BEGIN  PRINT 'Imported JSON is Valid'     END
ELSE
    BEGIN  PRINT 'Invalid JSON Imported'      END



SELECT @details as SingleRow_Column

--delivers one row Where

--SingleRow_Column=[{"result":[{country":"Germany","parent":.....


SELECT * FROM OPENJSON(@details, '$')

--delivers one row. Where 

--Key=0, value={"result":[{"country":"Germany","parent":"xxx".....


SELECT * FROM OPENJSON(@details, '$.result') 

-完全不发送任何行

现在出现错误消息,但没有数据

1 个答案:

答案 0 :(得分:1)

尝试一下

提示:我必须添加一些右括号...

DECLARE @YourJSON NVARCHAR(MAX)=
N'[{"result":
[{"country":"Germany",
  "parent":"xxxx",
"city":"Reitbrook",
"latitude":""}]}]';

SELECT B.*
FROM OPENJSON(@YourJson)        WITH(result NVARCHAR(MAX) AS JSON) A
CROSS APPLY OPENJSON(A.result)  WITH(country NVARCHAR(1000)
                                    ,parent NVARCHAR(1000)
                                    ,city NVARCHAR(1000) ) B;

简而言之:

您的JSON是一个数组,包含至少一个对象result。 (可能有更多的对象,但显示的对象不够多。)

此对象result本身就是数组。因此,我们将WITHAS JSON结合使用,并将另一个APPLY OPENJSON与返回为A.result的嵌套数组结合使用。