Criar Função SQL com Procedure;

30/05/2017

0

Pessoal boa tarde!! Estou com dificuldade de criar uma Função SQL com minha procedure conforme abaixo, poderiam me auxiliar, lembrando que as colunas de retorno é dinâmica de acordo com as datas informadas nos parâmetros; Pode ter 10 colunas como 100 colunas o resultado;




declare @datainicio DateTime
declare @dataFim DateTime
set @datainicio = '20150201'
set @datafim = '20160601'


declare @values as nvarchar(max)
SELECT @values = STUFF(( SELECT
'],[' + right('00' + CONVERT(VARCHAR,RPF_CdiMes),2) +'-'+ CONVERT(VARCHAR,RPF_DtiAno)
FROM ConRCDiasPontoEventosFins
WHERE RPF_CdiContratado in (158534,182370)
and ( (RPF_DtiAno * 100) + RPF_CdiMes >= (YEAR(@DataInicio)*100) + MONTH(@DataInicio) )
AND ( (Rpf_DtiAno * 100) + Rpf_CdiMes <= (YEAR(@DataFim) *100) + MONTH(@DataFim ) )
group by '],[' + right('00' + CONVERT(VARCHAR,RPF_CdiMes),2) + CONVERT(VARCHAR,RPF_DtiAno),
RPF_DtiAno,
RPF_CdiMes
ORDER BY RPF_DtiAno,RPF_CdiMes
FOR XML PATH('')
), 1, 2, '') + ']'

--Select @values
--- Esqueleto da query com os marcadores: Passo 2

declare @query as nvarchar(max)
set @query = 'Select Id,Nome ,Evento,|@
from
(
SELECT
RPF_CdiContratado Id,
CON_DssNome Nome,
EAP_D1sEventoPonto Evento,
right(''00'' + CONVERT(VARCHAR,RPF_CdiMes),2) +''-'' + CONVERT(VARCHAR,RPF_DtiAno)COLUNA,
RPF_QtnEventoPonto
FROM ConRCDiasPontoEventosFins
INNER JOIN Contratados ON (CON_CdiContratado = RPF_CdiContratado )
INNER JOIN EventosPonto ON (EAP_CdiEventoPonto = RPF_CdiEventoPonto)
WHERE RPF_CdiContratado in (158534,182370)
AND (RPF_DtiAno * 100) + RPF_CdiMes >= '+ convert(varchar,(YEAR(@DataInicio)*100) + MONTH(@DataInicio)) +'
AND (Rpf_DtiAno * 100) + Rpf_CdiMes <= '+ convert(varchar,(YEAR(@DataFim) *100) + MONTH(@DataFim )) +'
) PT

PIVOT
( SUM(RPF_QtnEventoPonto) for COLUNA in ( |@ )) pvt order by Nome'
set @query = REPLACE(@query,'|@',@values)

--- Executando a query
exec(@query)
Rene

Rene

Responder

Posts

31/05/2017

Daniel Araújo

Bom dia Renê!

Você quer transforma esse código que já funciona em uma procedure, é isso?

Se for isso, é só envolver o seu código dentro de um bloco assim:

CREATE PROCEDURE sp_nome_da_procudure
AS
BEGIN
	--COLOQUE O SEU CÓDIGO AQUI!!!
END;


Se a resposta for útil não esqueça de dar um like!
Responder

31/05/2017

Rene

Bom dia!!!
Em procedure eu já consegui montar, na verdade quero que o meu código seja uma função SQL;
tipo assim


Create FUNCTION NomeFuncao (@IdContratado int,@datainicio datetime,@datafim datetime )
RETURNS table
AS

return
(Código)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar