【问题标题】:open MYSQL json_array data in SQL_sever在 SQL_sever 中打开 MYSQL json_array 数据
【发布时间】:2021-04-15 22:47:18
【问题描述】:

我正在使用 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 列,不再需要旋转我的表格。

【问题讨论】:

    标签: mysql arrays json sql-server ssis


    【解决方案1】:
    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]'
    );
    

    【讨论】:

      猜你喜欢
      • 2021-03-18
      • 2015-09-08
      • 2014-06-07
      • 2020-07-30
      • 1970-01-01
      • 2020-05-19
      • 2019-07-12
      • 2020-04-18
      • 1970-01-01
      相关资源
      最近更新 更多