Sql server 从关系数据库提取JSON的通用方法?
好的,也许这对于StackOverflow来说太宽泛了,但是有没有一种好的、通用的方法来将关系表中的数据组装成分层JSON 例如,假设我们有一个“客户”表和一个“订单”表。我希望输出如下所示:Sql server 从关系数据库提取JSON的通用方法?,sql-server,json,mongodb,migration,relational-database,Sql Server,Json,Mongodb,Migration,Relational Database,好的,也许这对于StackOverflow来说太宽泛了,但是有没有一种好的、通用的方法来将关系表中的数据组装成分层JSON 例如,假设我们有一个“客户”表和一个“订单”表。我希望输出如下所示: { "customers": [ { "customerId": 123, "name": "Bob", "orders": [ { "o
{
"customers": [
{
"customerId": 123,
"name": "Bob",
"orders": [
{
"orderId": 456,
"product": "chair",
"price": 100
},
{
"orderId": 789,
"product": "desk",
"price": 200
}
]
},
{
"customerId": 999,
"name": "Fred",
"orders": []
}
]
}
我宁愿不必编写大量的过程代码来循环主表,一次获取几个订单并附加它们。这将是痛苦的缓慢
我使用的数据库是MS SQL Server,但我很快也需要对MySQL做同样的事情。我使用Java和JDBC进行访问。如果这两个数据库中的任何一个有某种神奇的方式在服务器端组装这些记录,那将是理想的
人们如何从关系数据库迁移到像MongoDB这样的JSON数据库?没有通用的方法,因为SQL Server不支持JSON作为其数据类型。您必须为此创建自己的“通用方式” 看看这篇文章。这里有一些关于如何将sql server数据操作为JSON格式的好例子
以下是一组有用的函数,用于将关系数据转换为JSON和XML,并将JSON转换回表格:我认为一个“通用”解决方案如下:-
您必须编写一个程序,该程序可以“垂直合并”给定客户ID的订单。对于一小部分数据,一个简单的java程序可以工作。但对于较大的集合,使用spark的并行编程可以完成这项工作
SQL Server 2016现在支持读取JSON的方式与多年来支持XML的方式基本相同。使用OPENJSON直接查询并存储JSON数据类型。SQLServer2016终于赶上并增加了对JSON的支持 JSON支持仍然与其他产品(如PostgreSQL)不匹配,例如,没有包含特定于JSON的数据类型。然而,添加了几个有用的T-SQL语言元素,使使用JSON变得轻而易举 例如,在以下Transact-SQL代码中,定义了包含JSON字符串的文本变量:
DECLARE @json NVARCHAR(4000)
SET @json =
N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}'
然后,您可以使用JSON\u VALUE
和JSON\u QUERY
函数从JSON文本中提取值和对象:
SELECT
JSON_VALUE(@json, '$.type') as type,
JSON_VALUE(@json, '$.info.address.town') as town,
JSON_QUERY(@json, '$.info.tags') as tags
此外,OPENJSON
函数允许从引用的JSON数组返回元素:
SELECT value
FROM OPENJSON(@json, '$.info.tags')
最后但并非最不重要的一点是,有一个FOR JSON
子句可以将SQL结果集格式化为JSON文本:
SELECT object_id, name
FROM sys.tables
FOR JSON PATH
一些参考资料: