SQL Server 仅读取有效 JSON 中的第一行

Hem*_*kar 3 json sql-server-2016 azure-sql-database

我的 JSON 如下所示。ADF 可以毫无问题地读取此 JSON 并导入所有行。

{"Row":{"Col1":"Val1", "Col2":"Val2"}}
{"Row":{"Col1":"Val1", "Col2":"Val2"}}
{"Row":{"Col1":"Val1", "Col2":"Val2"}}
Run Code Online (Sandbox Code Playgroud)

但是,当我使用下面的查询从 SQL 读取此内容时,它仅返回第一条记录。

SELECT * FROM OPENJSON(@JSONDATA, '$')
with (
    Col1 varchar(25) '$.Row.Col1'
);
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗?

ser*_*dat 5

我认为你必须像下面这样改变你的 JSON 数据结构。您的 JSON 也无效。尝试任何在线 JSON 验证器以查看差异。

正确的应该是:

[
  {"Col1":"Val1", "Col2":"Val2"},
  {"Col1":"Val1", "Col2":"Val2"},
  {"Col1":"Val1", "Col2":"Val2"}
]
Run Code Online (Sandbox Code Playgroud)

由于您的只是一个对象,因此它可能只会得到一行。 MSDNOPENJSON也是这样使用的。

将其更改为数组后,您必须像这样编辑查询:

SELECT * FROM OPENJSON(@JSONDATA, '$')
with (
    Col1 varchar(25) '$.Col1',
    Col2 varchar(25) '$.Col2'
);
Run Code Online (Sandbox Code Playgroud)

它现在获取所有行,如屏幕截图所示。

在此输入图像描述