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;