none
Store Procedure RRS feed

  • Pergunta

  •  

    Estou tendo problemas ao executar a SP abaixo, onde me aparece o seguinte erro "Procedure 'Turbidez_RERS' expects parameters '@Registros', wich was not suplied" o estranho é que esse erro só aparece quando a executo atraves do meu sistema, quando executo fazendo um teste atraves do QA a rotina funciona corretamente.

    CREATE PROCEDURE [Turbidez_RERS]
    @Mes nvarchar(2),
    @Ano nvarchar(4),
    @Sistema as nvarchar(4),
    @Campo nvarchar(1000),
    @Registros int,
    @Reg int
    as
    declare
    @Comando_SQL nvarchar(4000),
    @Clausula_Where nvarchar(4000),
    @Clausula_Or nvarchar(4000),
    @Parametros nvarchar(4000),
    @Tabela nvarchar(4000),
    @Nome_Tabela nvarchar(1000),
    @Tipo as nvarchar(2),
    @Tipo1 as nvarchar(2)

    set @Tipo = 'RE'
    set @Tipo1 = 'RS'
    Set @Tabela = N'dbo.TBResultado_Analises'
    Set @Parametros = N'@Reg int Output'

    set @Clausula_Where = N' Where ' + @Campo + ' >= 0 ' +  'and codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano + 'and codigoponto < ' + '141'
    set @Clausula_Or= N' or codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo1+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano

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

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

    select @Registros as Registros

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

    terça-feira, 20 de março de 2007 14:36

Todas as Respostas

  • Boa tarde Linaldo

     

    Não sei qual linguagem de programação você utiliza, contudo antes de executar a sua SP através de um ADOCommand por exemplo você tem que passar os parâmetros que sua função necessita, no seu caso você provavelmente deve ter esquecido o @Registros.

     

     

    Espero ter ajudado

    terça-feira, 20 de março de 2007 15:16
  • Ola Anderson,

    Estou utilizando o VB6.

    Na verdade o que me interessa é armazenar em um determinado campo o resultado do meu COUNT, quando eu executo a rotina que citei antes no QA funciona bem pois ele pega o resultado que esta na variavel @Registros que é o resultado do meu COUNT e armazena corretamente no entanto quando executo a mesma rotina diretamente pelo meu sistema em VB6 aparece o erro mencionado.

    terça-feira, 20 de março de 2007 17:39
  • Linaldo, tenta postar no Fórum de VB, creio que lá o pessoal pode te ajudar.

     

     

    Abs

    terça-feira, 20 de março de 2007 17:46
  • Anderson,

    Dei uma olhada no codigo e acabei descobrindo o que estava errado, na verdade quem faz toda a operação é o próprio SQLServer, o problema é que eu estava declarando a variavel @Registros no local errado, segue abaixo o código correto sendo executado diretamente pela aplicação em VB6, de qualquer forma grato, valeu pela força.

    CREATE PROCEDURE [Turbidez_RERS]
    @Mes nvarchar(2),
    @Ano nvarchar(4),
    @Sistema as nvarchar(4),
    @Campo nvarchar(1000)
    as
    declare
    @Comando_SQL nvarchar(4000),
    @Clausula_Where nvarchar(4000),
    @Clausula_Or nvarchar(4000),
    @Parametros nvarchar(4000),
    @Tabela nvarchar(4000),
    @Nome_Tabela nvarchar(1000),
    @Tipo as nvarchar(2),
    @Tipo1 as nvarchar(2),
    @Registros int,
    @Reg int

    set @Tipo = 'RE'
    set @Tipo1 = 'RS'
    Set @Tabela = N'dbo.TBResultado_Analises'
    Set @Parametros = N'@Reg int Output'

    set @Clausula_Where = N' Where ' + @Campo + ' >= 0 ' +  'and codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano + 'and codigoponto < ' + '141'
    set @Clausula_Or= N' or codigodosistema = '+ ''''+@Sistema+''''+' and tipoagua = ' + ''''+@Tipo1+'''' + ' and month(datacoleta)= ' + @Mes + ' and year(datacoleta)= ' + @Ano

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

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

    select @Registros as Registros

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

    terça-feira, 20 de março de 2007 18:54
  • Linaldo,

    Gostaria de dar uma pequena dica.

    Quando estou desenvolvendo meus aplicativos que deveram realizar executar comandos T-SQL, eu costumo colocar um componente Memo ou até mesmo text para que o aplicativo exibida como esta configurada a estrutura do script SQL que será executado, desta forma, fica mais fácil identificar em tempo de execução um determinado erro no sintáxe dos comandos.

    Após realizar todos os ajustes eu remove este componente da aplicação, pois agora tenho certeza que esta parte do meu código esta sendo processada corretamente.

    quarta-feira, 21 de março de 2007 11:39