在 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]'
);
我正在使用 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]'
);