No artigo de hoje, vamos demonstrar em como utilizar a FOR JSON PATH em uma query no SQL Server.
Antes de mais nada pessoal, gostaria de agradecer ao Wallace Freitas ( LinkedIn ), pela gentileza em montar e disponibilizar um exemplo.
O exemplo dele pode ser baixado na integra, nesse link: https://github.com/dan-atilio/SQL-Server/blob/master/Base%20de%20Conhecimento/Exemplo%20de%20SELECT%20com%20FOR%20JSON%20PATH.sql
Agora voltando aqui, fiz algumas adaptações nele, sendo que o intuito é gerar uma listagem de campos e índices de uma tabela. Abaixo como fica o resultado do JSON gerado via query:
E abaixo a query (deixei filtrando apenas a SA1, depois você pode adaptar seus filtros):
SELECT SX2.X2_CHAVE AS tabela, RTRIM(LTRIM(SX2.X2_NOME)) AS nome, ( SELECT X3_ORDEM AS sequencia, RTRIM(LTRIM(X3_CAMPO)) as campo, RTRIM(LTRIM(X3_DESCRIC)) AS descricao, CAST(X3_TAMANHO AS INTEGER) AS tamanho, X3_TIPO tipo FROM SX3990 SX3 WHERE X3_ARQUIVO = SX2.X2_CHAVE AND SX3.D_E_L_E_T_ = ' ' FOR JSON PATH ) AS colunas, ( SELECT ORDEM as sequencia, RTRIM(LTRIM(DESCRICAO)) as descricao, RTRIM(LTRIM(CHAVE)) AS chave, RTRIM(LTRIM(NICKNAME)) AS nickname FROM SIX990 SIX WHERE INDICE = SX2.X2_CHAVE AND SIX.D_E_L_E_T_ = ' ' FOR JSON PATH ) AS indices FROM SX2990 SX2 WHERE X2_CHAVE = 'SA1' AND SX2.D_E_L_E_T_ = '' FOR JSON PATH, ROOT('tables')
Levando em conta o exemplo acima, montei um segundo exemplo, mais enxuto de como usar o FOR JSON PATH, pegando os produtos de um grupo de produtos. Abaixo segue a query:
SELECT SBM.BM_GRUPO AS CODIGO, SBM.BM_DESC AS DESCRICAO, ( SELECT RTRIM(B1_COD) AS PROD_COD, RTRIM(B1_DESC) AS PROD_DESC, B1_TIPO AS PROD_TIPO, B1_UM AS PROD_UNID FROM SB1990 SB1 WHERE B1_FILIAL = '' AND B1_GRUPO = BM_GRUPO AND SB1.D_E_L_E_T_ = ' ' FOR JSON PATH ) AS PRODUTOS FROM SBM990 SBM WHERE SBM.D_E_L_E_T_ = ' '
Ao executá-la, será mostrado os dados, notem a coluna de produtos, tem as informações em JSON.
Quando é clicado em um desses conteúdos, é aberto uma nova aba (fiz os testes no Azure Data Studio), e ai ele mostra o JSON completo:
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Esse é o site que na maioria das vezes me salva.
Para mim você são referência no assunto!
Bom dia Gabriel, tudo joia?
Opa, obrigado pelo comentário, mas é muita bondade e generosidade sua.
O mérito desse artigo é todo do grande Wallace Freitas.
Um grande abraço.