sqlserver 解析json数据
时间: 2025-01-09 10:50:04 浏览: 88
### 如何在 SQL Server 中解析 JSON 数据
#### 使用 `OPENJSON` 函数解析 JSON 数据
为了有效地解析来自 SAP 接口传输的复杂多层级 JSON 数据,在 SQL Server 中可以利用 `OPENJSON` 行集函数将 JSON 文本转换成表格形式的数据[^2]。
下面是一个具体的例子,展示如何使用 `OPENJSON` 和带有路径表达式的 `WITH` 子句来提取特定字段并将其插入到数据库表中:
假设有一个名为 `@JsonData` 的变量保存着如下结构的 JSON 字符串:
```json
{
"BillName": "Order1",
"SendDate": "2023-09-08T14:30:00Z",
"ShippingDate": "2023-09-10T08:00:00Z",
"PackagingDate": "2023-09-09T17:45:00Z",
"ProductName": "ProductA",
"Qty": 100,
"Details": [
{
"DetailID": 1,
"Description": "First detail"
},
{
"DetailID": 2,
"Description": "Second detail"
}
]
}
```
要从中抽取信息并将这些数据插入到一个已存在的表 `Orders` 中,可以执行以下 T-SQL 命令:
```sql
INSERT INTO Orders (BillName, SendDate, ShippingDate, PackagingDate, ProductName, Qty)
SELECT *
FROM OPENJSON(@JsonData)
WITH (
BillName NVARCHAR(50) '$.BillName',
SendDate DATETIME2 '$.SendDate',
ShippingDate DATETIME2 '$.ShippingDate',
PackagingDate DATETIME2 '$.PackagingDate',
ProductName NVARCHAR(50) '$.ProductName',
Qty INT '$.Qty'
);
```
对于嵌套数组内的元素(如上述 JSON 中的 `Details` 数组),则需进一步应用 `CROSS APPLY` 或者再次调用 `OPENJSON` 来处理子级项目列表。例如获取所有的详情记录:
```sql
INSERT INTO OrderDetails(OrderId, DetailID, Description)
SELECT o.OrderId, d.DetailID, d.Description
FROM Orders AS o
CROSS APPLY OPENJSON(o.JsonContent, N'$.Details')
WITH (
DetailID INT '$.DetailID',
Description NVARCHAR(MAX) '$.Description'
) AS d;
```
这里假定存在另一个关联表 `OrderDetails` 并且每条订单都有对应的 JSON 内容存储于某列之中 (`o.JsonContent`)。
以上就是关于如何在 SQL Server 中解析 JSON 数据的一个基本介绍和实例说明[^5]。
阅读全文
相关推荐

















