首页 > 解决方案 > 在 SQL_sever 中打开 MYSQL json_array 数据

问题描述

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

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

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

因为我知道我想减小 JSON 大小并从 JSON 中删除表 Schema 的数据模式。创建的 JSON_ARRAY 如下所示:

[“流氓”,“12345”]

因此,在迁移到 SQL_Server 之后,我知道我可以CROSS APPLY OPENJSON(t.json)像这样使用并阅读它,但是我必须对其进行旋转,这根本没有效率!我可以看到如何打开普通的 JSON,这样你就不需要旋转你的数据,但我找不到任何 Array 类型的东西。

在一个理想的世界里,我想要这样的东西:

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

结果,我有 2 列,不再需要旋转我的表。

标签: mysqlarraysjsonsql-serverssis

解决方案


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]'
);

推荐阅读