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.