Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL将JSON列表解析为另一个表中的单独行_Sql_Arrays_Json_Sql Server_Azure Sql Database - Fatal编程技术网

SQL将JSON列表解析为另一个表中的单独行

SQL将JSON列表解析为另一个表中的单独行,sql,arrays,json,sql-server,azure-sql-database,Sql,Arrays,Json,Sql Server,Azure Sql Database,我将遥测数据连续发送到我的Azure SQL数据库,该数据库最终以以下格式显示在其登录表中: INSERT INTO landing (ID, rawData) VALUES ('Device1', [{"value1":"str1","value2":-109.0,"value3":3,"uselessvalue":16.0},{"value1":"str2&quo

我将遥测数据连续发送到我的Azure SQL数据库,该数据库最终以以下格式显示在其登录表中:

INSERT INTO landing (ID, rawData)
VALUES
('Device1', [{"value1":"str1","value2":-109.0,"value3":3,"uselessvalue":16.0},{"value1":"str2","value2":-111.0,"value3":3,"uselessvalue":21.0},{"value1":"str3","value2":-113.0,"value3":2,"uselessvalue":18.0}]);
列表中JSON的数量可以从1到几十个不等

我试图在另一个表中以确定的行分隔这些值,以便可以通过这种方式发送它们(可能在触发器中):


我已经找到了几种方法(使用逗号拆分、使用WHILE循环、使用Azure中不支持的关键字,如unest),但到目前为止我还找不到方法。

在SQL Server中,您可以使用
openjson()取消JSON数组的测试。


我不得不对json对象中的数据类型做一些假设,您可能需要查看。

效果很好,谢谢!您知道如何将value2类型更改为smallint(即使源值是十进制的)吗?如果我只是将数据类型更改为
smallint
,但收到一条错误消息,指示转换失败,并且在尝试使用
CAST
INSERT INTO parsedData (ID, value1, value2, value3)
VALUES
('Device1', 'str1', -109.0, 3),
('Device1', 'str2', -111.0, 3),
('Device1', 'str3', -113.0, 2);
insert into parseddata (id, value1, value2, value3)
select l.id, x.*
from landing l
cross apply openjson(l.rawdata) with (
    value1 varchar(50)   '$.value1',
    value2 decimal(5, 2) '$.value2',
    value3 int           '$.value3'
) x