Udostępnij za pośrednictwem


Automatyczne formatowanie danych wyjściowych JSON przy użyciu trybu AUTOMATYCZNEGO (SQL Server)

Dotyczy: SQL Server 2016 (13.x) i nowszych Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (tylko bezserwerowa pula SQL)

Aby sformatować dane wyjściowe klauzuli FOR JSON automatycznie na podstawie struktury instrukcji SELECT, określ opcję AUTO.

Po określeniu opcji AUTO format danych wyjściowych JSON jest automatycznie określany na podstawie kolejności kolumn na liście SELECT i ich tabelach źródłowych. Nie można zmienić tego formatu.

Alternatywą jest użycie opcji PATH, aby zachować kontrolę nad danymi wyjściowymi.

Zapytanie korzystające z opcji FOR JSON AUTO musi mieć klauzulę FROM.

Poniżej przedstawiono kilka przykładów klauzuli FOR JSON z opcją AUTO. Azure Data Studio jest zalecanym edytorem zapytań dla zapytań JSON, ponieważ automatycznie formatuje wyniki JSON (jak pokazano w tym artykule) zamiast wyświetlania prostego ciągu.

Przykłady

Przykład 1

Zapytanie

Gdy zapytanie odwołuje się tylko do jednej tabeli, wyniki klauzuli FOR JSON AUTO są podobne do wyników FOR JSON PATH. W tym przypadku FOR JSON AUTO nie tworzy zagnieżdżonych obiektów. Jedyną różnicą jest to, że FOR JSON AUTO wyprowadza aliasy oddzielone kropkami (na przykład Info.MiddleName w poniższym przykładzie) jako klucze z kropkami w nazwach, a nie jako obiekty zagnieżdżone.

SELECT TOP 5   
       BusinessEntityID As Id,  
       FirstName, LastName,  
       Title As 'Info.Title',  
       MiddleName As 'Info.MiddleName'  
   FROM Person.Person  
   FOR JSON AUTO  

wynik

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sánchez",
    "Info.MiddleName": "J"
}, {
    "Id": 2,
    "FirstName": "Terri",
    "LastName": "Duffy",
    "Info.MiddleName": "Lee"
}, {
    "Id": 3,
    "FirstName": "Roberto",
    "LastName": "Tamburello"
}, {
    "Id": 4,
    "FirstName": "Rob",
    "LastName": "Walters"
}, {
    "Id": 5,
    "FirstName": "Gail",
    "LastName": "Erickson",
    "Info.Title": "Ms.",
    "Info.MiddleName": "A"
}]

Przykład 2

Zapytanie

Podczas łączenia tabel kolumn w pierwszej tabeli są generowane jako właściwości obiektu głównego. Kolumny w drugiej tabeli są generowane jako właściwości zagnieżdżonego obiektu. Nazwa tabeli lub alias drugiej tabeli (przykładowo D w poniższym przykładzie) służy jako nazwa zagnieżdżonej tablicy.

SELECT TOP 2 SalesOrderNumber,  
        OrderDate,  
        UnitPrice,  
        OrderQty  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON AUTO   

Wynik

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO43659",
    "D": [{
        "UnitPrice": 34.40
    }, {
        "UnitPrice": 134.24,
        "OrderQty": 5
    }]
}]

Przykład 3

Zapytanie
Zamiast używać FOR JSON AUTO, możesz zagnieździć podzapytanie FOR JSON PATH w instrukcji SELECT, jak pokazano w poniższym przykładzie. W tym przykładzie wynik jest taki sam jak w poprzednim przykładzie.

SELECT TOP 2  
    SalesOrderNumber,  
    OrderDate,  
    (SELECT UnitPrice, OrderQty  
      FROM Sales.SalesOrderDetail AS D  
      WHERE H.SalesOrderID = D.SalesOrderID  
     FOR JSON PATH) AS D  
FROM Sales.SalesOrderHeader AS H  
FOR JSON PATH  

wynik

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO4390",
    "D": [{
        "UnitPrice": 24.99
    }]
}]

Dowiedz się więcej o formacie JSON w programie SQL Server i usłudze Azure SQL Database

Klipy wideo firmy Microsoft

Aby zapoznać się z wizualnym wprowadzeniem do wbudowanej obsługi kodu JSON w programie SQL Server i usłudze Azure SQL Database, zobacz następujące wideo:

Zobacz też

klauzula FOR (Transact-SQL)