在 SQL_sever 中打开 MYSQL json_array 数据

open MYSQL json_array data in SQL_sever

我正在使用 SSIS 将数据从 MYSQL 传输到 SQL_Server,大约有 200 个 table。 所以我写了一个动态 ETL,它只采用 table 的名称并处理其余的。

但是因为我必须有一个固定的 table 元数据,所以我在 MYSQL 中使用 JSON_array 从除 ID 之外的所有列中创建一个列,如下所示:

select id 
,JSON_ARRAY(name,cellphone) as JSON
from table

因为我知道数据架构,所以我想减小 JSON 大小并从 JSON 中删除 table 架构。 创建的 JSON_ARRAY 看起来像这样:

["hooman", "12345"]

所以在移动到 SQL_Server 之后,我知道我可以像这样使用 CROSS APPLY OPENJSON(t.json) 并阅读它,但是我必须旋转它,这根本没有效率! 我可以看到如何打开正常 JSON,这样您就不需要转换数据,但我找不到任何数组类型的内容。

在理想世界中,我想要这样的东西:

CROSS APPLY OPENJSON(t.json) with(
name  varchar(255) '$[0]' ,
cellphone int '$[1]' )

因此,我有 2 列,不再需要旋转我的 table。

declare @json nvarchar(max) = N'["hooman", "12345"]';

select json_value(@json, '$[0]') as name, json_value(@json, '$[1]') as cellphone;

select *
from openjson(concat('{"x":', @json, '}')) 
with
(
name  varchar(255) '$.x[0]' ,
cellphone int '$.x[1]'
);

select *
from openjson(concat('[', @json, ']')) 
with
(
name  varchar(255) '$[0]' ,
cellphone int '$[1]'
);