Inquiridor
Store Procedure

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)= ' + @AnoSet @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
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
-
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.
-
-
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 intset @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)= ' + @AnoSet @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 -
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.