sql >> Databáze >  >> RDS >> Sqlserver

Příklady SQL Server PRO JSON PATH (T-SQL)

Při používání serveru SQL Server můžete použít FOR JSON klauzule v dotazu pro formátování výsledků jako JSON. Při tom musíte vybrat buď AUTO nebo PATH volba. Tento článek obsahuje příklady použití PATH možnost.

Syntaxe

Syntaxe vypadá takto:

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

Takže v podstatě vše, co musíte udělat, je přidat FOR JSON PATH na konec vašeho dotazu.

Příklad 1 – Základní použití

Zde je příklad k demonstraci.

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

Výsledek:

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

Výsledky tedy vyjdou jako pěkně naformátovaný dokument JSON, nikoli v řádcích a sloupcích.

V tomto případě jsem použil TOP 3 omezit sadu výsledků na pouhé tři výsledky.

Výsledky s jedním řádkem?

Vaše výsledky se mohou zpočátku zobrazit v jednom řádku a jediném sloupci a jako jeden dlouhý řádek, jako je tento:

V takovém případě zkuste kliknout na sadu výsledků. V závislosti na vašem softwaru pro správu databází by to mělo spustit dokument JSON, jak je uvedeno ve výše uvedeném příkladu.

Zda to funguje přesně tak, jak je popsáno, bude záviset na softwaru, který používáte k dotazování na SQL Server.

V době psaní tohoto článku to pro mě fungovalo dobře při používání SQL Operations Studio (které bylo mezitím přejmenováno na Azure Data Studio). Fungovalo to také dobře při použití rozšíření MSSQL ve VS Code. SSMS však pouze formátuje výsledky jako jeden dlouhý řádek (i když stále ve formátu JSON).

Také jsem měl různé stupně úspěchu pomocí nástrojů příkazového řádku.

Můžete také zjistit, že výsledky jsou zpočátku rozděleny do více řádků v závislosti na tom, jak velká je sada výsledků.

Pokud nemůžete dosáhnout toho, aby zobrazoval výsledky uspokojivým způsobem, zkuste jiný nástroj.

Příklad 2 – Dotaz ve více tabulkách

V tomto příkladu dotazuji dvě tabulky, které mají mezi sebou vztah jedna k mnoha. V tomto případě může mít každý interpret mnoho alb a já používám dílčí dotaz k načtení alb pro každého interpreta.

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;

Výsledek:

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

V tomto případě bylo každé album vnořeno pod „Alba“. Je to proto, že alba jsou vrácena prostřednictvím dílčího dotazu.

Příklad 3 – Vnořený výstup s tečkovou notací

Při použití PATH můžete použít názvy sloupců oddělené tečkami k vytvoření vnořených objektů.

Chcete-li to provést, použijte alias oddělený tečkami. Zde je příklad:

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

Výsledek:

[
    {
        "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"
        }
    }
]

Příklad 4 – Přidání kořenového uzlu

Můžete použít ROOT() možnost přidat kořenový uzel do výstupu. Tím se do výstupu přidá jeden prvek nejvyšší úrovně. Chcete-li to provést, jednoduše přidejte ROOT() možnost na konec dotazu s názvem, který chcete, aby měl kořenový uzel.

Takže můžeme upravit předchozí příklad na tento:

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

Výsledek:

{
    "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"
            }
        }
    ]
}

Příklad 5 – Odstraňte obal pole

Můžete použít WITHOUT_ARRAY_WRAPPER možnost odstranit hranaté závorky, které obklopují výsledky.

Příklad:

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

Výsledek:

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

Pamatujte, že pokud to uděláte u výsledku s více řádky, skončíte s neplatným JSON.


  1. 11 způsobů, jak vrátit cizí klíče v databázi SQL Server pomocí T-SQL

  2. Chyba migrace řemeslníka při nastavování Laravelu na počítači Mac:Žádný takový soubor nebo adresář

  3. Jak porovnat dva řádky ze stejné tabulky

  4. SQL Buddy – Webový nástroj pro správu MySQL