Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal.
Eu já utilizo o FOR JSON PATH para retornar o o resultado de uma consulta com JSON. Isso eu já sei fazer.
O que preciso é criar uma função que receba um SELECT como parâmetro e retorne o resultado desse SELECT já formatado como JSON.
Estou tentando isso, mas sem sucesso.
A function dbo.fn_retornaJsonPath :
(@String NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
BEGIN
IF @String <> NULL
SET @String = (SELECT @String AS jsonPath FOR JSON PATH)
END
BEGIN
IF @String IS NULL
SET @String = '[]'
END
RETURN @String
END
Forma de executar:
SET @sql = 'SELECT '
SET @sql = @sql + ' dbo.fn_retornaJsonPath ((SELECT TT.tema FROM dbo.tabela AS TT WHERE TT.cd = CTT.id)) AS ''temas'' '
SET @sql = @sql + ' FROM dbo.minhaTab AS CTT '
EXEC(@sql)
Mas não está rolando....
Olá @Marcos_imasters.
Tentei exaustivamente rodar o seu código...mas sem sucesso.
O SQL Server sequer reconhece "SYSJSON" para declarar a variável @JsonValue.
É alguma função de versão antiga do SQL Server? Estou usando a última versão do Management Studio e SQl Server 2022.
sim ela é reconhecida até o 2019,tente assim
CREATE FUNCTION FormatJsonString(@String NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;@Marcos_imasters...continua ocorrendo erro.
USE [meu_banco]
GO
/**** Object: UserDefinedFunction [dbo].[FormatJsonString] Script Date: 11/09/2023 16:52:25 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].FormatJsonString)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;
Veja o erro:
Msg 102, Nível 15, Estado 1, Procedimento FormatJsonString, Linha 9 [Linha de Início do Lote 7]
Sintaxe incorreta próxima a '='.
Parece que há problema nessa linha
RETURN FORMATJSON(@JsonValue, 'indent' = 4);>
Em 11/09/2023 at 17:02, FabianoSouza disse:
@Marcos_imasters...continua ocorrendo erro.
USE [meu_banco]
GO
/**** Object: UserDefinedFunction [dbo].[FormatJsonString] Script Date: 11/09/2023 16:52:25 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].FormatJsonString)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;
Veja o erro:
Msg 102, Nível 15, Estado 1, Procedimento FormatJsonString, Linha 9 [Linha de Início do Lote 7]
Sintaxe incorreta próxima a '='.
Parece que há problema nessa linha
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
o correto nao seria
RETURN FORMATJSON(@JsonValue, indent = 4);>
10 horas atrás, Marcos_imasters disse:
o correto nao seria
RETURN FORMATJSON(@JsonValue, indent = 4);
Já testei sem as aspas, testei substituindo o = por vírgula... não executa.
Esse código roda aí no seu SQL?cara nao sei transact-sql só estou vendo com bases que eu vi que pode ser
USE [meu_banco]
GO
/**** Object: UserDefinedFunction [dbo].[FormatJsonString] Script Date: 11/09/2023 16:52:25 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].FormatJsonString)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue NVARCHAR(MAX) AS JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;
tenta assim>
7 horas atrás, Marcos_imasters disse:
cara nao sei transact-sql só estou vendo com bases que eu vi que pode ser
USE [meu_banco]
GO
/**** Object: UserDefinedFunction [dbo].[FormatJsonString] Script Date: 11/09/2023 16:52:25 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].FormatJsonString)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue NVARCHAR(MAX) AS JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;
tenta assim
@Marcos_imasters...continua ocorrendo erro.
USE [meu_banco]
GO
/**** Object: UserDefinedFunction [dbo].[FormatJsonString] Script Date: 11/09/2023 16:52:25 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].FormatJsonString)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;
Veja o erro:
Msg 102, Nível 15, Estado 1, Procedimento FormatJsonString, Linha 9 [Linha de Início do Lote 7]
Sintaxe incorreta próxima a '='.
Parece que há problema nessa linha
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
>
7 horas atrás, Marcos_imasters disse:
cara nao sei transact-sql só estou vendo com bases que eu vi que pode ser
USE [meu_banco]
GO
/**** Object: UserDefinedFunction [dbo].[FormatJsonString] Script Date: 11/09/2023 16:52:25 ****/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].FormatJsonString)
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN
DECLARE @JsonValue NVARCHAR(MAX) AS JSON;
SET @JsonValue = CAST(@String AS JSON);
RETURN FORMATJSON(@JsonValue, 'indent' = 4);
END
ELSE
BEGIN
RETURN '[]';
END
END;
tenta assim
Não vai de jeito nenhum... já tentei várias combinações.
Mas de todo modo, agradeço :-)
CREATE FUNCTION FormatJsonString(@String NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
IF @String IS NOT NULL
BEGIN