Como utilizar o FOR JSON PATH em SQL Server

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:

Exemplo do resultado

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.

Listagem dos dados

 

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:

Exemplo do resultado

 

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação