适用于:Microsoft
Fabric 预览版中的 SQL Server 2016 (13.x) 及更高版本 Azure
SQL
数据库 Azure
Synapse Analytics (仅限无服务器 SQL 池)SQL 数据库
以下示例演示了在 SQL Server 或客户端应用中使用 FOR JSON
子句及其 JSON 输出的一些方法。 有关详细信息,请参阅借助 FOR JSON 将查询结果的格式设置为 JSON。
在 Fabric 数据仓库中, FOR JSON
必须是查询中的最后一个运算符,因此不允许在子查询中,如本文中的示例所示。
在 SQL 数据库引擎变量中使用 FOR JSON 输出
子句的 FOR JSON
输出的类型为 nvarchar(max),因此你可以将其分配给任何变量,如以下示例所示。
DECLARE @x NVARCHAR(MAX) =
(SELECT TOP 10 *
FROM Sales.SalesOrderHeader
FOR JSON AUTO)
在 SQL 数据库引擎用户定义函数中使用 FOR JSON 输出
你可以创建将结果集格式化为 JSON 并返回此 JSON 输出的用户定义函数。 下面的示例创建一个用户定义函数,该函数提取一些销售订单详细信息行,并将它们格式化为 JSON 数组。
CREATE FUNCTION GetSalesOrderDetails(@salesOrderId int)
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN (SELECT UnitPrice, OrderQty
FROM Sales.SalesOrderDetail
WHERE SalesOrderID = @salesOrderId
FOR JSON AUTO)
END
你可以在批或查询中使用此函数,如下面的示例中所示。
DECLARE @x NVARCHAR(MAX) = dbo.GetSalesOrderDetails(43659)
PRINT dbo.GetSalesOrderDetails(43659)
SELECT TOP 10
H.*, dbo.GetSalesOrderDetails(H.SalesOrderId) AS Details
FROM Sales.SalesOrderHeader H
将父数据和子数据合并到单个表中
下面的示例将每组子行格式化为 JSON 数组。 JSON 数组将成为父表中“详细信息”列的值。
SELECT TOP 10 SalesOrderId, OrderDate,
(SELECT TOP 3 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE H.SalesOrderId = D.SalesOrderID
FOR JSON AUTO) AS Details
INTO SalesOrder
FROM Sales.SalesOrderHeader H
更新 JSON 列中的数据
下面的示例演示如何更新包含 JSON 文本的列的值。
UPDATE SalesOrder
SET Details =
(SELECT TOP 1 UnitPrice, OrderQty
FROM Sales.SalesOrderDetail D
WHERE D.SalesOrderId = SalesOrder.SalesOrderId
FOR JSON AUTO)
在 C# 客户端应用中使用 FOR JSON 输出
下面的示例演示如何在 C# 客户端应用中将查询的 JSON 输出检索到 StringBuilder 对象中。 假定变量queryWithForJson
包含SELECT
语句中带有FOR JSON
子句的文本。
var queryWithForJson = "SELECT ... FOR JSON";
using(var conn = new SqlConnection("<connection string>"))
{
using(var cmd = new SqlCommand(queryWithForJson, conn))
{
conn.Open();
var jsonResult = new StringBuilder();
var reader = cmd.ExecuteReader();
if (!reader.HasRows)
{
jsonResult.Append("[]");
}
else
{
while (reader.Read())
{
jsonResult.Append(reader.GetValue(0).ToString());
}
}
}
}
详细了解 SQL 数据库引擎中的 JSON
有关内置 JSON 支持的视觉简介,请参阅以下视频:
相关内容
- 使用 FOR JSON 将查询结果格式化为 JSON