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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar