none
Criação de Store de Procedure RRS feed

  • Pergunta

  • Estou tentando criar uma SP onde irei utilizar a função COUNT() em um campo aleatorio de uma determinada tabela no entanto nao estou conseguindo passar o campo que desejo através de um parametro na SP, será que alguem pode me dar alguma dica a respeito, segue abaixo um exemplo do que tentei fazer.

    Grato

    CREATE PROCEDURE [Turbidez_RERS]
    @Mes int,
    @Ano int,
    @Sistema as nvarchar(4),
    @Parametro as nvarchar(50)
    AS
    declare @total as int
    If Len(@Sistema) > 0
    BEGIN
    set @total=(SELECT  TOP 100 PERCENT COUNT(@Parametro) 
    FROM         dbo.tbResultado_Analises
    WHERE     (CodigoDoSistema=@Sistema) and (MONTH(datacoleta) = @Mes) AND (YEAR(datacoleta) = @Ano) AND (@Parametro >= 0) AND (codigoponto < '141') AND (tipoagua = 'RE') OR
                          (MONTH(datacoleta) = @Mes) AND (YEAR(datacoleta) =@Ano) AND (tipoagua = 'RS') and (CodigoDoSistema=@Sistema)
    GROUP BY CodigoDoSistema
    ORDER BY CodigoDoSistema)
    END

    if @Mes=10
    BEGIN
    UPDATE tbSSaude_PlanoDeAmostragem
    SET OutRedeQtd_realizada= @total
    where   anoreferencia=@Ano  AND CodigoDoSistema=@Sistema and  codigodoparametro='0175'
    END
    GO

    segunda-feira, 5 de março de 2007 18:21

Todas as Respostas

  • Boa tarde Linaldo tenta da seguinte forma:

     

    CREATE PROCEDURE [Turbidez_RERS]
    @Mes int,
    @Ano int,
    @Sistema as nvarchar(4),
    @Parametro as nvarchar(50)
    AS
    declare @total as int
    If Len(@Sistema) > 0
    BEGIN
    SET @total=(SELECT  TOP 100 PERCENT COUNT(*) 
    FROM         dbo.tbResultado_Analises
    WHERE     (CodigoDoSistema=@Sistema) and (MONTH(datacoleta) = @Mes) AND (YEAR(datacoleta) = @Ano) AND (@Parametro = @Parametro) AND (codigoponto < '141') AND (tipoagua = 'RE') OR
                          (MONTH(datacoleta) = @Mes) AND (YEAR(datacoleta) =@Ano) AND (tipoagua = 'RS') and (CodigoDoSistema=@Sistema)
    GROUP BY CodigoDoSistema
    ORDER BY CodigoDoSistema)
    END

    if @Mes=10
    BEGIN
    UPDATE tbSSaude_PlanoDeAmostragem
    SET OutRedeQtd_realizada= @total
    where   anoreferencia=@Ano  AND CodigoDoSistema=@Sistema and  codigodoparametro='0175'
    END
    GO

     

     

    Espero ter ajudado

    segunda-feira, 5 de março de 2007 18:26
  • esse parametro pode ser ate um * por padrao assim vc. pois nao e um count distict deix fixo o * e analise se o reasultado e o que vc. queria

     

    Abs;

    segunda-feira, 5 de março de 2007 18:27
  • Vc tb pode tentar assim

    CREATE PROCEDURE [Turbidez_RERS]
    @Mes int,
    @Ano int,
    @Sistema as nvarchar(4),
    @Parametro as nvarchar(50)
    AS
    declare @total as int
    If Len(@Sistema) > 0
    BEGIN
    SELECT @total=SELECT   COUNT(*) 
    FROM         dbo.tbResultado_Analises
    WHERE     (CodigoDoSistema=@Sistema) and (MONTH(datacoleta) = @Mes) AND (YEAR(datacoleta) = @Ano) AND (@Parametro = @Parametro) AND (codigoponto < '141') AND (tipoagua = 'RE') OR
                          (MONTH(datacoleta) = @Mes) AND (YEAR(datacoleta) =@Ano) AND (tipoagua = 'RS') and (CodigoDoSistema=@Sistema)
    GROUP BY CodigoDoSistema
    ORDER BY CodigoDoSistema

    if @Mes=10
    BEGIN
    UPDATE tbSSaude_PlanoDeAmostragem
    SET OutRedeQtd_realizada= @total
    where   anoreferencia=@Ano  AND CodigoDoSistema=@Sistema and  codigodoparametro='0175'
    END

    segunda-feira, 5 de março de 2007 18:28
  • Ola Anderson boa tarde,

    Eu até poderia utilizar o " * " mas o problema é que nesse momento eu necessito fazer a contagem de um campo especifico, por exemplo, o que me interessa saber é a contagem do campo "Turbidez" onde o minha variavel "@Paramentro" teria como conteudo o nome do campo para que a SP fizesse a contagem pra mim, seria alguma coisa mais ou menos assim:

    SELECT  TOP 100 PERCENT COUNT(tubidez) as tota_turbidez 
    FROM         dbo.tbResultado_Analises

     

    Espero ter conseguido passar qual é o meu drama.

    Grato

    segunda-feira, 5 de março de 2007 18:42
  • Ola Marcelo boa tarde,

    Eu até poderia utilizar o " * " mas o problema é que nesse momento eu necessito fazer a contagem de um campo especifico, por exemplo, o que me interessa saber é a contagem do campo "Turbidez" onde o minha variavel "@Paramentro" teria como conteudo o nome do campo para que a SP fizesse a contagem pra mim, seria alguma coisa mais ou menos assim:

    SELECT  TOP 100 PERCENT COUNT(tubidez) as tota_turbidez 
    FROM         dbo.tbResultado_Analises

     

    Espero ter conseguido passar qual é o meu drama.

    Grato




    Linaldo

    segunda-feira, 5 de março de 2007 18:45
  •  

    vc. pode usar a sp_executesql com um output de paramatro +- assim

     

    exec sp_executesql @TSql, N'@Retorno Numeric(10,2) OUTPUT', @Retorno  OUTPUT

     

    mais para isso vc. tera que contactenar todo o select em uma variavel,

     

    Abs;

    segunda-feira, 5 de março de 2007 18:50
  • Boa tarde Linaldo, vc pode executar uma sp_executesql tb, neste caso ficaria assim.Qualquer coisa retorne.

     

    Declare @Comando_SQL nvarchar(max),

    @Parametros nvarchar(max),

    @Tabela nvarchar(max),

    @Nome_Tabela nvarchar(max),

    @Campo nvarchar(max),

    @Registros int,

    @Reg int

    Set @Tabela = N'dbo.TBResultado_Analises'

    Set @Campo = N'tubidez'

    Set @Parametros = N'@Reg int Output'

    Set @Comando_SQL = N'SELECT @Reg = Count(' + @Campo + ') from ' + @Tabela

    EXECUTE SP_ExecuteSql @Comando_Sql,@Parametros,@Reg=@Registros Output

    select @Registros as Registros

     

     

    Espero ter ajudado

    segunda-feira, 5 de março de 2007 18:53
  • Ola Anderson, boa tarde

    Segui o exemplo que voce me passou, porem ao executar a rotina esta me retornando um valor nulo, e tb a seguinte mensagem de erro:

    Server: Msg 170, Level 15, State 1, Line 1
    Line 1: Incorrect syntax near ')'.
    Server: Msg 137, Level 15, State 1, Line 1
    Must declare the variable '@Reg'.

    Tentei fazer algumas mudanças, mas nao consegui o resultado desejado tb.

    grato

     

    segunda-feira, 5 de março de 2007 19:55
  • Ola Marcelo boa  tarde,

    Segui o exemplo do Anderson que é algo similar ao que voce me indicou e tive alguns erros, creio que pode ser por conta da definiçao de algumas variaveis, estou fazendo mais alguns testes para ver se consigo evoluir, mas agradeço pela força. 

    segunda-feira, 5 de março de 2007 19:59