SELECT
1 AS tag,
NULL AS parent,
emp.EmployeeID AS [!1!EmployeeID],
so.CustomerID AS [!1!CustomerID],
so.Region AS [!1!Region]
FROM Employees AS emp KEY JOIN SalesOrders AS so WHERE emp.EmployeeID <= 195
ORDER BY 3
FOR JSON EXPLICIT;
SELECT
1 AS tag,
NULL AS parent,
emp.EmployeeID AS [emp!1!EmployeeID],
null AS [so!2!CustomerID],
null AS [!2!Region]
FROM Employees as emp where emp.EmployeeID <= 195
UNION ALL
SELECT
2,
1,
emp.EmployeeID,
so.CustomerID,
so.Region
FROM Employees as emp KEY JOIN SalesOrders as so where emp.EmployeeID <= 195
ORDER BY 3, 1
FOR JSON EXPLICIT;
除数组排序以及包含无销售订单的雇员之外,上述格式与 FOR JSON AUTO 结果不同的原因仅在于 emp 是结构数组。在 FOR JSON AUTO 中,这意味着 emp 仅具有一个对象。FOR JSON EXPLICIT 使用支持集合的数组封装。
以下示例删除 emp 封装并以值的形式返回 Region。此示例演示了 FOR JSON EXPLICIT 模式如何提供精细的格式控制,以在 RAW 和 AUTO 模式之间生成某些内容。
SELECT
1 AS tag,
NULL AS parent,
emp.EmployeeID AS [!1!EmployeeID], // remove "emp" encapsulation
null AS [so!2!id], // change "CustomerID" to just "id"
null AS [!2!] // stipulate that region should be emitted as a value
FROM Employees AS emp WHERE emp.EmployeeID <= 195
UNION ALL
SELECT
2,
1,
emp.EmployeeID,
so.CustomerID,
so.Region
FROM Employees as emp KEY JOIN SalesOrders AS so WHERE emp.EmployeeID <= 195
ORDER BY 3, 1
FOR JSON EXPLICIT;
以下示例与使用 FOR JSON RAW 时类似,但 employeeID、CustomerID 和 Region 以值(而非名称/值对)的形式输出:
SELECT
1 AS tag,
NULL AS parent,
emp.EmployeeID, // no alias directives
so.CustomerID,
so.Region
FROM Employees AS emp KEY JOIN SalesOrders AS so WHERE emp.EmployeeID <= 195
ORDER BY 3
FOR JSON EXPLICIT;
查询返回以下结果,即生成了由 EmployeeID、CustomerID 和 Region 组成的二维数组: