mysql - 在 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 列,不再需要旋转我的表。
解决方案
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]'
);
推荐阅读
- vb.net - 当我运行代码、获取结果并重复时,之前的用户输入会显示在新用户输入之前。任何的想法?
- javascript - 如何在 daterangepicker.js 中仅指定启用日期?
- java - 这是合并排序的稳定实现吗
- performance - 如何避免下载js文件和认证ember SPA
- eclipse - 在eclipse中安装springsource-tool-suite的一些问题
- sql - “FETCH”和“FETCH FIRST”有区别吗?
- arduino - 如何使服务器能够使用 arduino for ESP32 WebServer 自动下载文件,而不使用 SPIFFS 而是使用 SDcard 文件
- matrix - 使用 SSE 在列主要顺序和行主要顺序之间转置的最佳方法
- swift - 对 SwiftUI 中的 @EnvironmentObject 感到困惑
- python - 如何真正快速地打印输出并修复重复打印模式,这也是输出的划分问题?