Usuário com melhor resposta
Stored procedure

Pergunta
-
Como converter o comando abaixo para Stored Procedure?
;with IdadeCasos as ( SELECT B.id, year(C.data_Contato) as AnoCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade from OJ_Prod_AARH as C inner join ag_Soc_PF as B on B.id = C.cod_pf --where ... ), AnoaAno as ( SELECT AnoCaso, FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end), FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end), FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end), FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end) from IdadeCasos group by AnoCaso ), MediaC as ( SELECT avg(FxEtaria1) as FxEtaria1, avg(FxEtaria2) as FxEtaria2, avg(FxEtaria3) as FxEtaria3, avg(FxEtaria4) as FxEtaria4 from AnoaAno ), Media as ( SELECT FxE, Casos from MediaC unpivot (Casos for FxE in ([FxEtaria1], [FxEtaria2], [FxEtaria3], [FxEtaria4])) as U ), PopFxE as ( select case when FXETARIA <= 0909 then 'FxEtaria1' when FXETARIA <= 1919 then 'FxEtaria2' when FXETARIA <= 5959 then 'FxEtaria3' else 'FxEtaria4' end as FaixaEtaria, sum(POPULACAO) as Populacao from POPBR10 Where MUNIC_RES=411850 group by case when FXETARIA <= 0909 then 'FxEtaria1' when FXETARIA <= 1919 then 'FxEtaria2' when FXETARIA <= 5959 then 'FxEtaria3' else 'FxEtaria4' end ) SELECT case M.FxE when 'FxEtaria1' then 'Crianças' when 'FxEtaria2' then 'Adolescentes' when 'FxEtaria3' then 'Adultos' when 'FxEtaria4' then 'Terceira idade' end as [GRUPO ETÁRIO], cast((1000. * (M.Casos / P.Populacao)) as decimal(8,2)) as [Taxa (casos por 1.000 hab.)] --, M.Casos, P.Populacao from Media as M inner join PopFxE as P on P.FaixaEtaria = M.FxE order by M.FxE;
- Editado Wilson Boris sexta-feira, 28 de fevereiro de 2014 14:35 correçao
Respostas
-
Wilson,
Poderia detalhar melhor. Poderia ser apenas a criação deste código dentro de uma procedure. Veja abaixo:
CREATE PROC Sua_procedure AS BEGIN -- ... -- Todo o conteúdo indicado END GO --OU incluir parâmetros para obter os dados das consultas de acordo com o desejado CREATE PROC Sua_Procedure @MUNIC_RES int, @FxEtaria1 tinyint AS BEGIN -- ... -- Todo o conteúdo indicado END GO
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Durval RamosModerator terça-feira, 20 de maio de 2014 23:57
-
Wilson,
Basta executar o comando "EXEC", veja abaixo:
EXEC spTaxaAtaqueAARHFaixaEtaria GO
Para maiores informações sobre o uso de stored procedures, veja:
http://technet.microsoft.com/en-us/library/aa174792(v=sql.80).aspx
http://technet.microsoft.com/pt-br/library/ms187926(v=SQL.105).aspx
http://technet.microsoft.com/pt-br/library/ms189762.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Wilson Boris segunda-feira, 7 de abril de 2014 11:44
Todas as Respostas
-
Wilson,
Poderia detalhar melhor. Poderia ser apenas a criação deste código dentro de uma procedure. Veja abaixo:
CREATE PROC Sua_procedure AS BEGIN -- ... -- Todo o conteúdo indicado END GO --OU incluir parâmetros para obter os dados das consultas de acordo com o desejado CREATE PROC Sua_Procedure @MUNIC_RES int, @FxEtaria1 tinyint AS BEGIN -- ... -- Todo o conteúdo indicado END GO
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Durval RamosModerator terça-feira, 20 de maio de 2014 23:57
-
-
Durval, obrigado pelo retorno.
Eu nunca trabalhei com SP, é o mesmo código incluso nesta sintaxe?
O código Select nos campos "Todo o conteúdo indicado"
?
Wilson,
Sim, é o mesmo código. Existem algumas exceções, mas o que você está propondo fazer deve funcionar sem problemas.
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
Durval, obrigado pelo retorno.
Eu nunca trabalhei com SP, é o mesmo código incluso nesta sintaxe?
O código Select nos campos "Todo o conteúdo indicado"
?
Wilson,
este seu select é fixo? vai ter alguma parametro dinamico?
Se a resposta for não, coloque a sua sintaxe exatamente onde o Durval marcou "Todo o conteúdo indicado".
Se atente também para o nome da procedure.[]´s
-
Desculpe a demora.
Seria o código abaixo?
Ao clicar em executar, obtenho o retorno:
"Comando(s) concluído(s) com êxito."
Como verificar os valores da pesquisa?
USE [pesquise] GO /****** Object: StoredProcedure [dbo].[spTaxaAtaqueAARHFaixaEtaria] Script Date: 05-04-2014 09:41:54 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[spTaxaAtaqueAARHFaixaEtaria] AS BEGIN ;with IdadeCasos as ( SELECT B.id, year(C.data_Contato) as AnoCaso, DateDiff(year, B.data_nasc, C.data_Contato) as Idade from OJ_Prod_AARH as C inner join ag_Soc_PF as B on B.id = C.cod_pf --where ... ), AnoaAno as ( SELECT AnoCaso, FxEtaria1= sum(case when Idade <= 9 then 1 else 0 end), FxEtaria2= sum(case when Idade between 10 and 19 then 1 else 0 end), FxEtaria3= sum(case when Idade between 20 and 59 then 1 else 0 end), FxEtaria4= sum(case when Idade >= 60 then 1 else 0 end) from IdadeCasos group by AnoCaso ), MediaC as ( SELECT avg(FxEtaria1) as FxEtaria1, avg(FxEtaria2) as FxEtaria2, avg(FxEtaria3) as FxEtaria3, avg(FxEtaria4) as FxEtaria4 from AnoaAno ), Media as ( SELECT FxE, Casos from MediaC unpivot (Casos for FxE in ([FxEtaria1], [FxEtaria2], [FxEtaria3], [FxEtaria4])) as U ), PopFxE as ( select case when FXETARIA <= 0909 then 'FxEtaria1' when FXETARIA <= 1919 then 'FxEtaria2' when FXETARIA <= 5959 then 'FxEtaria3' else 'FxEtaria4' end as FaixaEtaria, sum(POPULACAO) as Populacao from POPBR10 Where MUNIC_RES=411850 group by case when FXETARIA <= 0909 then 'FxEtaria1' when FXETARIA <= 1919 then 'FxEtaria2' when FXETARIA <= 5959 then 'FxEtaria3' else 'FxEtaria4' end ) SELECT case M.FxE when 'FxEtaria1' then 'Crianças' when 'FxEtaria2' then 'Adolescentes' when 'FxEtaria3' then 'Adultos' when 'FxEtaria4' then 'Terceira idade' end as [GRUPO ETÁRIO], cast((1000. * (M.Casos / P.Populacao)) as decimal(8,2)) as [Taxa (casos por 1.000 hab.)] --, M.Casos, P.Populacao from Media as M inner join PopFxE as P on P.FaixaEtaria = M.FxE order by M.FxE; END
- Editado Wilson Boris sábado, 5 de abril de 2014 12:45 complemento
-
Wilson,
Basta executar o comando "EXEC", veja abaixo:
EXEC spTaxaAtaqueAARHFaixaEtaria GO
Para maiores informações sobre o uso de stored procedures, veja:
http://technet.microsoft.com/en-us/library/aa174792(v=sql.80).aspx
http://technet.microsoft.com/pt-br/library/ms187926(v=SQL.105).aspx
http://technet.microsoft.com/pt-br/library/ms189762.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Wilson Boris segunda-feira, 7 de abril de 2014 11:44