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

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

W 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 AUTO opcja.

Składnia

Składnia wygląda tak:

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

Więc w zasadzie wszystko, co musisz zrobić, to dodać FOR JSON AUTO 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 AUTO;

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 używanego 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 takim przypadku każdy wykonawca może mieć wiele albumów.

USE Music;
SELECT 
  ArtistName, 
  AlbumName
FROM Artists
  INNER JOIN Albums
    ON Artists.ArtistId = Albums.ArtistId
ORDER BY ArtistName
FOR JSON AUTO;

Wynik:

[
    {
        "ArtistName": "AC/DC",
        "Albums": [
            {
                "AlbumName": "Powerage"
            }
        ]
    },
    {
        "ArtistName": "Allan Holdsworth",
        "Albums": [
            {
                "AlbumName": "All Night Wrong"
            },
            {
                "AlbumName": "The Sixteen Men of Tain"
            }
        ]
    },
    {
        "ArtistName": "Buddy Rich",
        "Albums": [
            {
                "AlbumName": "Big Swing Face"
            }
        ]
    },
    {
        "ArtistName": "Devin Townsend",
        "Albums": [
            {
                "AlbumName": "Ziltoid the Omniscient"
            },
            {
                "AlbumName": "Casualties of Cool"
            },
            {
                "AlbumName": "Epicloud"
            }
        ]
    },
    {
        "ArtistName": "Iron Maiden",
        "Albums": [
            {
                "AlbumName": "Powerslave"
            },
            {
                "AlbumName": "Somewhere in Time"
            },
            {
                "AlbumName": "Piece of Mind"
            },
            {
                "AlbumName": "Killers"
            },
            {
                "AlbumName": "No Prayer for the Dying"
            }
        ]
    },
    {
        "ArtistName": "Jim Reeves",
        "Albums": [
            {
                "AlbumName": "Singing Down the Lane"
            }
        ]
    },
    {
        "ArtistName": "Michael Learns to Rock",
        "Albums": [
            {
                "AlbumName": "Blue Night"
            },
            {
                "AlbumName": "Eternity"
            },
            {
                "AlbumName": "Scandinavia"
            }
        ]
    },
    {
        "ArtistName": "The Script",
        "Albums": [
            {
                "AlbumName": "No Sound Without Silence"
            }
        ]
    },
    {
        "ArtistName": "Tom Jones",
        "Albums": [
            {
                "AlbumName": "Long Lost Suitcase"
            },
            {
                "AlbumName": "Praise and Blame"
            },
            {
                "AlbumName": "Along Came Jones"
            }
        ]
    }
]

Jak widać, każdy album został zagnieżdżony w „Albumach”. Dzieje się tak, ponieważ AUTO opcja określa dane wyjściowe na podstawie kolejności kolumn w SELECT lista i ich tabele źródłowe.

Przykład 3 – 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
  ArtistName, 
  AlbumName
FROM Artists
  INNER JOIN Albums
    ON Artists.ArtistId = Albums.ArtistId
ORDER BY ArtistName
FOR JSON AUTO, ROOT('Music');

Wynik:

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

Ograniczyłem również zestaw wyników do zaledwie trzech wyników, dodając TOP 3 do zapytania.

Przykład 4 – 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 AUTO, 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. Architektura programu SQL Server AlwaysOn (grupa dostępności) i instalacja krok po kroku -1

  2. Obliczanie odległości między dwoma punktami (szerokość geograficzna, długość geograficzna)

  3. Używanie SQL Server jako kolejki DB z wieloma klientami

  4. Analiza przypadku aktualizacji sprzętu serwera bazy danych SQL Server

  5. Jak złapać wyjątki limitu czasu SQLServer?