Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server POUR JSON PATH Exemples (T-SQL)

Lorsque vous utilisez SQL Server, vous pouvez utiliser le FOR JSON clause dans une requête pour formater les résultats au format JSON. Dans ce cas, vous devez choisir soit AUTO ou le PATH option. Cet article contient des exemples d'utilisation du PATH option.

Syntaxe

La syntaxe ressemble à ceci :

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

Donc, fondamentalement, tout ce que vous avez à faire est d'ajouter FOR JSON PATH à la fin de votre requête.

Exemple 1 - Utilisation de base

Voici un exemple pour illustrer.

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

Résultat :

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

Ainsi, les résultats apparaissent sous la forme d'un document JSON bien formaté, au lieu de lignes et de colonnes.

Dans ce cas, j'ai utilisé TOP 3 pour limiter le jeu de résultats à seulement trois résultats.

Résultats sur une seule ligne ?

Vos résultats peuvent initialement apparaître sur une seule ligne et une seule colonne, et sur une longue ligne comme celle-ci :

Si tel est le cas, essayez de cliquer sur le jeu de résultats. En fonction de votre logiciel de gestion de base de données, cela devrait lancer le document JSON tel qu'il apparaît dans l'exemple ci-dessus.

Que cela fonctionne exactement comme décrit dépendra du logiciel que vous utilisez pour interroger SQL Server.

Au moment d'écrire ces lignes, cela fonctionnait bien pour moi lorsque j'utilisais SQL Operations Studio (qui a depuis été renommé Azure Data Studio). Cela a également bien fonctionné lors de l'utilisation de l'extension MSSQL dans VS Code. Cependant, SSMS ne formate les résultats que sur une longue ligne (bien que toujours au format JSON).

J'ai également eu plus ou moins de succès avec les outils de ligne de commande.

Vous pouvez également constater que les résultats sont initialement répartis sur plusieurs lignes, en fonction de la taille de l'ensemble de résultats.

Si vous ne parvenez pas à afficher les résultats de manière satisfaisante, essayez un autre outil.

Exemple 2 – Requête sur plusieurs tables

Dans cet exemple, j'interroge deux tables qui ont une relation un-à-plusieurs entre elles. Dans ce cas, chaque artiste peut avoir plusieurs albums, et j'utilise une sous-requête pour récupérer les albums de chaque artiste.

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;

Résultat :

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

Dans ce cas, chaque album a été imbriqué sous "Albums". En effet, les albums sont renvoyés via une sous-requête.

Exemple 3 - Sortie imbriquée avec notation par points

Lors de l'utilisation du PATH option, vous pouvez utiliser des noms de colonnes séparés par des points pour créer des objets imbriqués.

Pour ce faire, utilisez un alias séparé par un point. Voici un exemple :

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

Résultat :

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

Exemple 4 - Ajouter un nœud racine

Vous pouvez utiliser le ROOT() option pour ajouter un nœud racine à la sortie. Cela ajoute un seul élément de niveau supérieur à la sortie. Pour cela, il suffit d'ajouter le ROOT() option à la fin de la requête, avec le nom que vous voulez donner au nœud racine.

Nous pouvons donc modifier l'exemple précédent en ceci :

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

Résultat :

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

Exemple 5 - Supprimer l'encapsuleur de tableau

Vous pouvez utiliser le WITHOUT_ARRAY_WRAPPER option pour supprimer les crochets qui entourent les résultats.

Exemple :

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

Résultat :

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

Notez que si vous faites cela sur un résultat à plusieurs lignes, vous vous retrouverez avec un JSON invalide.