Wenn Sie FOR JSON EXPLICIT in einer Abfrage verwenden, können Sie Spalten als einfache Werte, Objekte oder verschachtelte Objekte angeben, um einheitliche oder heterogene Arrays zu erzeugen.
FOR JSON EXPLICIT
FOR JSON EXPLICIT verwendet einen Spaltenalias, um eine detaillierte Formatspezifikation bereitzustellen. Wenn kein Alias vorhanden ist, wird die angegebene Spalte als Wert ausgegeben. Ein Alias muss vorhanden sein, wenn Werte (oder Objekte) innerhalb einer verschachtelten Struktur ausgedrückt werden sollen.
Sie müssen die ersten beiden Spalten in der Auswahlliste mit tag und parent benennen. Eine Vereinigung von mehreren Abfragen kann eine verschachtelte JSON-Ausgabe zurückgeben, indem die Beziehung zwischen Tag und übergeordnetem Element in jeder Abfrage angegeben wird.
Das Format für die Aliasdirektive ist [encapsulating_object!tag!name!qualifier]
. Dabei gilt:
! grenzt Direktivenkriterien ab.
encapsulating_object gibt ein verkapselndes Objekt (Array-Objekt) für das Auswahllistenelement aus.
tag definiert einen Bezeichner für die Spalte, die in nachfolgenden Abfragen verwendet wird. Außerdem werden Verschachtelungskriterien (relativ zum übergeordneten Objekt) festgelegt.
name weist einen Namen für das (Name/Wert-Paar)-Objekt zu.
qualifier kann entweder element (Standardwert) oder hide sein, um das Element in der Ergebnismenge zu verschleiern.
Die folgende Abfrage verwendet FOR JSON EXPLICIT, um Mitarbeiterinformationen aus der Tabelle "Employees" zurückzugeben:
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; |
Das Ergebnis ist identisch mit dem des FOR JSON RAW-Beispiels:
[ { "EmployeeID" : 129, "CustomerID" : 107, "Region" : "Eastern" }, { "EmployeeID" : 129, "CustomerID" : 119, "Region" : "Western" }, ... { "EmployeeID" : 129, "CustomerID" : 131, "Region" : "Eastern" }, { "EmployeeID" " 195, "CustomerID" : 176, "Region" : "Eastern" } ] |
Im folgenden Beispiel wird eine Ergebnismenge zurückgegeben, die dem Ergebnis des FOR JSON AUTO-Beispiels ähnlich ist:
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; |
Die obige Abfrage gibt das folgende Ergebnis zurück:
[ {"emp": [{"EmployeeID":102}]}, {"emp":[{"EmployeeID":105}]}, {"emp": [{"EmployeeID":129, "so":[ {"CustomerID":101,"Region":"Eastern"}, ... {"CustomerID":205,"Region":"Eastern"} ] }] }, {"emp":[{"EmployeeID":148}]}, {"emp":[{"EmployeeID":160}]}, {"emp":[{"EmployeeID":184}]}, {"emp":[{"EmployeeID":191}]}, {"emp": [{"EmployeeID":195, "so":[ {"CustomerID":101,"Region":"Eastern"}, ... {"CustomerID":209,"Region":"Western"} ] }] } ] |
Außer der Reihenfolge der Arrays und der Einbeziehung von Mitarbeitern ohne Bestellungen unterscheidet sich das obige Format von den FOR JSON AUTO-Ergebnissen nur insofern, als emp ein Array von Strukturen ist. In FOR JSON AUTO ist klar, dass emp nur ein einzelnes Objekt hat. FOR JSON EXPLICIT verwendet eine Array-Verkapselung, die Aggregation unterstützt.
Im folgenden Beispiel wird die emp-Verkapselung entfernt und "Region" als Wert zurückgegeben. Dieses Beispiel zeigt, wie der FOR JSON EXPLICIT-Modus eine granulare Formatierungssteuerung ermöglicht, um ein Ergebnis zu erzeugen, das zwischen denen der Modi RAW und AUTO liegt.
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; |
Im Abfrageergebnis ist so nicht mehr ein Array von Objekten, sondern ein zweidimensionales Array:
[ {"EmployeeID":102},{"EmployeeID":105},{"EmployeeID":129, "so":[ [{"id":101},"Eastern"], ... [{"id":205},"Eastern"] ] }, {"EmployeeID":148}, {"EmployeeID":160}, {"EmployeeID":184}, {"EmployeeID":191}, {"EmployeeID":195, "so":[ [{"id":101},"Eastern"], ... [{"id":209},"Western"] ] } ] |
Das folgende Beispiel ist ähnlich wie die Verwendung von FOR JSON RAW, aber EmployeeID, CustomerID und Region werden als Werte und nicht Name/Wert-Paare ausgegeben:
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; |
Diese Abfrage gibt das folgende Ergebnis zurück, wobei ein zweidimensionales Array aus EmployeeID, CustomerID und Region erzeugt wird:
[ [129,107,"Eastern"], ... [195,176,"Eastern"] ] |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |