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

SQL Server FOR JSON AUTO Příklady (T-SQL)

V 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í AUTO možnost.

Syntaxe

Syntaxe vypadá takto:

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

Takže v podstatě vše, co musíte udělat, je přidat FOR JSON AUTO 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 AUTO;

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 mi to fungovalo dobře, když jsem používal 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.

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

Výsledek:

[
    {
        "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 můžete vidět, každé album bylo vnořeno pod „Alba“. Je to proto, že AUTO volba určuje výstup na základě pořadí sloupců v SELECT seznam a jejich zdrojové tabulky.

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

Výsledek:

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

Také jsem omezil sadu výsledků na pouhé tři výsledky přidáním TOP 3 na dotaz.

Příklad 4 – 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 AUTO, 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. Hledání mezer v sekvencích v tabulce v Oracle

  2. Spusťte SERVERPROPERTY() proti propojenému serveru v SQL Server

  3. Jak se připojit v java jako SYS k Oracle?

  4. Použití automatizace k urychlení testů vydání na Galera Cluster s ClusterControl