## SQL Server 中的 OPENJSON 函数
简介
在 SQL Server 中,`OPENJSON` 函数是一个强大的工具,它允许你将 JSON 文档解析成关系数据,以便轻松地在 SQL 查询中访问和处理数据。
1. OPENJSON 函数的基本语法
```sql
OPENJSON ( json_expression [, path ] [, [ WITH (
参数:
json_expression:
一个包含 JSON 文档的表达式,例如一个 VARCHAR 变量或列。
path (可选):
指定 JSON 文档中要解析的路径,例如一个键或数组索引。
WITH (可选):
定义 JSON 属性映射到输出列。
2. 使用 OPENJSON 解析简单 JSON 数据
考虑以下 JSON 文档:```json {"name": "John Doe","age": 30,"city": "New York" } ```你可以使用以下 SQL 查询解析这个 JSON 文档:```sql DECLARE @json VARCHAR(MAX) = '{"name": "John Doe","age": 30,"city": "New York" }';SELECT
FROM OPENJSON(@json) WITH (name VARCHAR(100) '$.name',age INT '$.age',city VARCHAR(100) '$.city' ); ```这将产生以下结果:| name | age | city | |----------|-----|-----------| | John Doe | 30 | New York |
3. 使用 OPENJSON 解析 JSON 数组
考虑以下 JSON 数组:```json [{ "id": 1, "name": "Product A" },{ "id": 2, "name": "Product B" },{ "id": 3, "name": "Product C" } ] ```你可以使用以下 SQL 查询解析这个 JSON 数组:```sql DECLARE @json VARCHAR(MAX) = '[{ "id": 1, "name": "Product A" },{ "id": 2, "name": "Product B" },{ "id": 3, "name": "Product C" } ]';SELECT
FROM OPENJSON(@json) WITH (id INT '$.id',name VARCHAR(100) '$.name' ); ```这将产生以下结果:| id | name | |----|------------| | 1 | Product A | | 2 | Product B | | 3 | Product C |
4. 使用 OPENJSON 处理嵌套 JSON
考虑以下嵌套 JSON 文档:```json {"person": {"name": "John Doe","age": 30},"address": {"street": "123 Main St","city": "New York"} } ```你可以使用以下 SQL 查询解析这个 JSON 文档:```sql DECLARE @json VARCHAR(MAX) = '{"person": {"name": "John Doe","age": 30},"address": {"street": "123 Main St","city": "New York"} }';SELECTj1.value AS 'person',j2.value AS 'address' FROM OPENJSON(@json) WITH (person JSON '$.person',address JSON '$.address' ) AS j1 CROSS APPLY OPENJSON(j1.person) WITH (name VARCHAR(100) '$.name',age INT '$.age' ) AS j2 CROSS APPLY OPENJSON(j1.address) WITH (street VARCHAR(100) '$.street',city VARCHAR(100) '$.city' ); ```这将产生以下结果:| person | address | |--------------------|-------------------------| | {"name": "John Doe", "age": 30} | {"street": "123 Main St", "city": "New York"} |
5. OPENJSON 的其他功能
`$.` 路径语法:
指定 JSON 文档中要解析的键或数组索引。
`WITH` 子句:
定义 JSON 属性映射到输出列,并指定数据类型。
`AS` 关键字:
为输出列分配别名。
`CROSS APPLY`:
用于将结果集与其他数据源或函数结合起来。
6. 示例:从 JSON 字符串中提取数据
假设你有一个数据库表 `Orders`,其中 `OrderDetails` 列存储 JSON 格式的订单详细信息。你可以使用 `OPENJSON` 提取订单信息:```sql SELECTo.OrderID,j.value AS 'ProductName',j.value AS 'Quantity' FROM Orders o CROSS APPLY OPENJSON(o.OrderDetails) WITH (ProductName VARCHAR(100) '$.ProductName',Quantity INT '$.Quantity' ) AS j; ```
结论
`OPENJSON` 函数是 SQL Server 中解析和处理 JSON 数据的强大工具。它提供了一种灵活且高效的方式将 JSON 文档转换为关系数据,并支持各种 JSON 数据格式。
SQL Server 中的 OPENJSON 函数**简介**在 SQL Server 中,`OPENJSON` 函数是一个强大的工具,它允许你将 JSON 文档解析成关系数据,以便轻松地在 SQL 查询中访问和处理数据。 **1. OPENJSON 函数的基本语法**```sql
OPENJSON ( json_expression [, path ] [, [ WITH (