Usuário com melhor resposta
Como converter uma função para view

Pergunta
-
Boa tarde,
Tenho a seguinte função:
if object_id('dbo.batidas', 'TF') is null begin exec('create function dbo.batidas() returns @retorno table(T int) as begin return end'); end; go alter function dbo.batidas(@data_inicio date, @data_final date) returns @retorno table(chapa varchar(100), nome varchar(100), filial varchar(100), secao varchar(100), situacao varchar(100), [data 1] date, [data 2] date, [data 3] date, ocorrencia varchar(100)) as begin declare @batidas table(filial varchar(100), coligada varchar(100), chapa varchar(100), secao varchar(100), situacao varchar(100), nome varchar(100), data datetime, dia varchar(100), batida int); insert into @batidas (filial, coligada, chapa, secao, situacao, nome, data, dia, batida) select f.filial, f.coligada, f.chapa, f.secao, f.situacao, f.nome, v.data, datename(dw,v.data), max(v.sequencialbatida) from arelbatidatransitoview as v left join vwfunc as f on v.chapa = f.chapa where datepart(dw,v.data) = 1 -- domingo and batida is not null and v.data between @data_inicio and @data_final and v.codcoligada = 1 group by v.chapa, v.data, f.filial, f.coligada, f.chapa, f.secao, f.funcao, f.nome, f.situacao; insert into @retorno (chapa, nome, filial, secao, situacao, [data 1], [data 2], [data 3], ocorrencia) select t1.chapa, t1.nome, t1.filial, t1.secao, t1.situacao, cast(t1.data as date), cast(t2.data as date), cast(t3.data as date), '04 - TESTE DOMINGO' from @batidas as t1 inner join @batidas as t2 on t2.chapa = t1.chapa inner join @batidas as t3 on t3.chapa = t1.chapa where t2.data = dateadd(day, + 7, t1.data) and t3.data = dateadd(day, + 14, t1.data); return; end; go
Eu faço pesquisa nela com a seguinte query:
SELECT bat.CHAPA, LEFT(bat.NOME,25) AS NOME, bat.FILIAL, bat.SECAO, bat.NSECAO, bat.SITUACAO, bat.[DATA 1], bat.[DATA 2], bat.[DATA 3], bat.OCORRENCIA FROM dbo.batidas(@DTINICIO, @DTFINAL) bat WHERE bat.FILIAL = @LOJA ORDER BY bat.FILIAL,bat.NSECAO,bat.NOME;
O que gostaria, transformar a query em uma uma view pois assim poderia fazer um join com outras views que tenho para exibir em um painel.
Só que hoje eu não consigo porque a função precisa de paramentos, e por isso não aceita, alguém poderia me dar uma dica de como fazer ?
Veja a mensagem quando tento criar uma view da query:
Com os paramentos na query:
Msg 137, Nível 15, Estado 2, Procedimento VIEW_MAIS_DOIS_DOMINGOS_SEM_FOLGA, Linha 13 [Linha de Início do Lote 11] Must declare the scalar variable "@DTINICIO".
Sem os paramentos na query:
Msg 216, Nível 16, Estado 1, Procedimento VIEW_MAIS_DOIS_DOMINGOS_SEM_FOLGA, Linha 13 [Linha de Início do Lote 11] Parameters were not supplied for the function 'dbo.batidas'.
- Editado otaciojb segunda-feira, 17 de junho de 2019 18:13 Adicionado mais informações
Respostas
Todas as Respostas
-
otaciojb,
Toda e qualquer view não suporta e não permite uso de parâmetros ou variáveis em seu bloco de Código, somente em sua execução.
Minha sugestão, transforme a function em uma Stored Procedure.
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Sugerido como Resposta IgorFKModerator terça-feira, 18 de junho de 2019 12:10
-
-