Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Exemplos de PATH do SQL Server FOR JSON (T-SQL)


Ao usar o SQL Server, você pode usar o FOR JSON cláusula em uma consulta para formatar os resultados como JSON. Ao fazer isso, você deve escolher a opção AUTO ou o PATH opção. Este artigo contém exemplos de uso do PATH opção.


Sintaxe


A sintaxe fica assim:
SELECT ...
  (your query goes here)
FOR JSON PATH;

Então, basicamente, tudo que você precisa fazer é adicionar FOR JSON PATH ao final de sua consulta.

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
USE Music;
SELECT TOP 3 
  AlbumName, 
  ReleaseDate
FROM Albums
FOR JSON PATH;

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

Assim, os resultados saem como um documento JSON bem formatado, em vez de linhas e colunas.

Neste caso eu usei TOP 3 para limitar o conjunto de resultados a apenas três resultados.

Resultados de linha única?


Seus resultados podem aparecer inicialmente em uma única linha e uma única coluna, e como uma longa linha como esta:



Se este for o caso, tente clicar no conjunto de resultados. Dependendo do seu software de gerenciamento de banco de dados, isso deve iniciar o documento JSON conforme aparece no exemplo acima.

Se isso funcionará exatamente como descrito, dependerá do software que você usa para consultar o SQL Server.

No momento da escrita, isso funcionou bem para mim ao usar o SQL Operations Studio (que desde então foi renomeado para Azure Data Studio). Também funcionou bem ao usar a extensão MSSQL no VS Code. No entanto, o SSMS apenas formata os resultados como uma linha longa (embora ainda no formato JSON).

Eu também tive vários graus de sucesso usando ferramentas de linha de comando.

Você também pode descobrir que os resultados são inicialmente distribuídos em várias linhas, dependendo do tamanho do conjunto de resultados.

Se você não conseguir exibir os resultados de maneira satisfatória, tente uma ferramenta diferente.

Exemplo 2 – Consulta em várias tabelas


Neste exemplo, consulto duas tabelas que têm um relacionamento um-para-muitos entre elas. Nesse caso, cada artista pode ter vários álbuns, e eu uso uma subconsulta para recuperar os álbuns de cada artista.
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;

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

Nesse caso, cada álbum foi aninhado em “Álbuns”. Isso ocorre porque os álbuns são retornados por meio de uma subconsulta.

Exemplo 3 – Saída aninhada com notação de ponto


Ao usar o PATH opção, você pode usar nomes de coluna separados por pontos para criar objetos aninhados.

Para fazer isso, use um alias separado por pontos. Aqui está um exemplo:
USE Music;
SELECT TOP 3 
  AlbumId,
  AlbumName AS 'Details.Album Name', 
  ReleaseDate AS 'Details.Release Date'
FROM Albums
FOR JSON PATH;

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

Exemplo 4 – Adicionar um nó raiz


Você pode usar o ROOT() opção para adicionar um nó raiz à saída. Isso adiciona um único elemento de nível superior à saída. Para fazer isso, basta adicionar o ROOT() opção ao final da consulta, com o nome que você deseja que o nó raiz tenha.

Assim, podemos modificar o exemplo anterior para isso:
USE Music;
SELECT TOP 3 
  AlbumId,
  AlbumName AS 'Details.Album Name', 
  ReleaseDate AS 'Details.Release Date'
FROM Albums
FOR JSON PATH, ROOT('Albums');

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

Exemplo 5 – Remova o wrapper de matriz


Você pode usar o WITHOUT_ARRAY_WRAPPER opção para remover os colchetes que cercam os resultados.

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

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

Observe que, se você fizer isso em um resultado de várias linhas, acabará com um JSON inválido.