Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przykłady SQL Server FOR JSON PATH (T-SQL)

Korzystając z SQL Server, możesz użyć FOR JSON klauzula w zapytaniu, aby sformatować wyniki jako JSON. Robiąc to, musisz wybrać opcję AUTO lub PATH opcja. Ten artykuł zawiera przykłady użycia PATH opcja.

Składnia

Składnia wygląda tak:

SELECT ...
  (your query goes here)
FOR JSON PATH;

Więc w zasadzie wszystko, co musisz zrobić, to dodać FOR JSON PATH do końca zapytania.

Przykład 1 – Podstawowe użycie

Oto przykład do zademonstrowania.

USE Music;
SELECT TOP 3 
  AlbumName, 
  ReleaseDate
FROM Albums
FOR JSON PATH;

Wynik:

[
    {
        "AlbumName": "Powerslave",
        "ReleaseDate": "1984-09-03"
    },
    {
        "AlbumName": "Powerage",
        "ReleaseDate": "1978-05-05"
    },
    {
        "AlbumName": "Singing Down the Lane",
        "ReleaseDate": "1956-01-01"
    }
]

Wyniki są więc wyświetlane jako ładnie sformatowany dokument JSON, a nie w wierszach i kolumnach.

W tym przypadku użyłem TOP 3 aby ograniczyć zestaw wyników do zaledwie trzech wyników.

Wyniki pojedynczej linii?

Twoje wyniki mogą początkowo pojawiać się w jednym wierszu i jednej kolumnie, a także jako jedna długa linia:

W takim przypadku spróbuj kliknąć zestaw wyników. W zależności od oprogramowania do zarządzania bazą danych, powinno to uruchomić dokument JSON, jak widać w powyższym przykładzie.

To, czy działa to dokładnie tak, jak opisano, zależy od oprogramowania, którego używasz do wysyłania zapytań do serwera SQL.

W momencie pisania tego tekstu działało to dobrze podczas korzystania z programu SQL Operations Studio (którego nazwa została zmieniona na Azure Data Studio). Działało również dobrze podczas korzystania z rozszerzenia MSSQL w VS Code. Jednak SSMS formatuje wyniki tylko jako jedną długą linię (chociaż nadal w formacie JSON).

Miałem też różne stopnie sukcesu przy użyciu narzędzi wiersza poleceń.

Może się również okazać, że wyniki są początkowo rozłożone w wielu wierszach, w zależności od tego, jak duży jest zestaw wyników.

Jeśli nie możesz zmusić go do wyświetlania wyników w zadowalający sposób, wypróbuj inne narzędzie.

Przykład 2 – Zapytanie w wielu tabelach

W tym przykładzie wysyłam zapytanie do dwóch tabel, które mają między sobą relację jeden-do-wielu. W tym przypadku każdy wykonawca może mieć wiele albumów, a ja używam podzapytania, aby pobrać albumy dla każdego wykonawcy.

USE Music;
SELECT TOP 2 ArtistName,
    (SELECT AlbumName 
        FROM Albums
        WHERE Artists.ArtistId = Albums.ArtistId
        FOR JSON PATH) AS Albums
FROM Artists
ORDER BY ArtistName
FOR JSON PATH;

Wynik:

[
    {
        "ArtistName": "AC/DC",
        "Albums": [
            {
                "AlbumName": "Powerage"
            }
        ]
    },
    {
        "ArtistName": "Allan Holdsworth",
        "Albums": [
            {
                "AlbumName": "All Night Wrong"
            },
            {
                "AlbumName": "The Sixteen Men of Tain"
            }
        ]
    }
]

W tym przypadku każdy album został zagnieżdżony w „Albumach”. Dzieje się tak, ponieważ albumy są zwracane przez podzapytanie.

Przykład 3 – zagnieżdżone wyjście z notacją punktową

Używając PATH opcji, możesz użyć nazw kolumn oddzielonych kropkami, aby utworzyć zagnieżdżone obiekty.

Aby to zrobić, użyj aliasu oddzielonego kropkami. Oto przykład:

USE Music;
SELECT TOP 3 
  AlbumId,
  AlbumName AS 'Details.Album Name', 
  ReleaseDate AS 'Details.Release Date'
FROM Albums
FOR JSON PATH;

Wynik:

[
    {
        "AlbumId": 1,
        "Details": {
            "Album Name": "Powerslave",
            "Release Date": "1984-09-03"
        }
    },
    {
        "AlbumId": 2,
        "Details": {
            "Album Name": "Powerage",
            "Release Date": "1978-05-05"
        }
    },
    {
        "AlbumId": 3,
        "Details": {
            "Album Name": "Singing Down the Lane",
            "Release Date": "1956-01-01"
        }
    }
]

Przykład 4 – Dodaj węzeł główny

Możesz użyć ROOT() możliwość dodania węzła głównego do danych wyjściowych. Powoduje to dodanie do danych wyjściowych pojedynczego elementu najwyższego poziomu. Aby to zrobić, po prostu dodaj ROOT() na końcu zapytania, podając nazwę, którą ma mieć węzeł główny.

Więc możemy zmodyfikować poprzedni przykład do tego:

USE Music;
SELECT TOP 3 
  AlbumId,
  AlbumName AS 'Details.Album Name', 
  ReleaseDate AS 'Details.Release Date'
FROM Albums
FOR JSON PATH, ROOT('Albums');

Wynik:

{
    "Albums": [
        {
            "AlbumId": 1,
            "Details": {
                "Album Name": "Powerslave",
                "Release Date": "1984-09-03"
            }
        },
        {
            "AlbumId": 2,
            "Details": {
                "Album Name": "Powerage",
                "Release Date": "1978-05-05"
            }
        },
        {
            "AlbumId": 3,
            "Details": {
                "Album Name": "Singing Down the Lane",
                "Release Date": "1956-01-01"
            }
        }
    ]
}

Przykład 5 – Usuń opakowanie tablicy

Możesz użyć WITHOUT_ARRAY_WRAPPER opcja usunięcia nawiasów kwadratowych otaczających wyniki.

Przykład:

USE Music;
SELECT TOP 1 
  AlbumName, 
  ReleaseDate
FROM Albums
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;

Wynik:

{
    "AlbumName": "Powerslave",
    "ReleaseDate": "1984-09-03"
}

Pamiętaj, że jeśli zrobisz to w wyniku wielu wierszy, otrzymasz nieprawidłowy kod JSON.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 sposoby sprawdzania zduplikowanych wierszy w SQL Server

  2. Czy istnieje kombinacja LIKE i IN w SQL?

  3. Jak wygenerować plan wykonania w SQL Server

  4. Jak połączyć się z bazą danych serwera SQL z aplikacji Windows 10 UWP

  5. Jak wyświetlić datę w amerykańskim formacie daty w programie SQL Server (T-SQL)