Retorno de Stored Procedure

24/12/2003

0

Olá,

Estou começando com SQL-Server 7 e estou apanhando em alguns detalhes.

Tenho em meu banco de dados uma tabela que possui
um único campo (Val_Atual tipo Integer) com um único registro.

Preciso fazer uma procedure que incremente o valor deste campo e que me retorne o valor depois de atualizado.

Incrementar o valor já está funcionando mas não consigo pegar o valor atualizado no programa.

Esta é a proc que eu fiz.

CREATE PROCEDURE [RETORNA_VAL_ATUAL] AS
SET ROWCOUNT 1

if (Select Count(*) From NRO_ATUAL) = 0
GOTO INCLUIR

/*
** INCREMENTA EM 1 O VALOR DO CAMPO ´VAL_ATUAL´
*/
begin transaction

UPDATE NRO_ATUAL SET VAL_ATUAL = VAL_ATUAL + 1

commit

GOTO FIM

INCLUIR:

/*
** CRIA UM NOVO REGISTRO SE NÃO EXISTIR NENHUM
*/
begin transaction
INSERT INTO NRO_ATUAL (VAL_ATUAL) VALUES (1)

commit

FIM:
Select VAL_ATUAL From NRO_ATUAL


Estou usando ADO para conexão com ADOStoreProc para interface com a procedure.

Se puderem me ajudar...

Agradeço a todos.


Marcelo.l

Marcelo.l

Responder

Posts

29/12/2003

Fabricio_saldanha

Marcelo,

primeiro evite utilizar estruturas tipo goto.
tente utilizar o codigo abaixo:

CREATE PROCEDURE RETORNA_VAL_ATUAL
@Val_Atual int output
AS
begin
set nocount on
if (Select Count(*) From NRO_ATUAL) > 0
begin
begin transaction
UPDATE NRO_ATUAL
SET VAL_ATUAL = VAL_ATUAL + 1
commit
end
else
begin
begin transaction
INSERT INTO NRO_ATUAL (VAL_ATUAL) VALUES (1)
commit
end
select @Val_Atual = VAL_ATUAL
From NRO_ATUAL
set nocount off
end

no delphi quando definir os parametros do objeto TAdoStoreProc defina o parametro como sendo output, execute a procedure e depois leia o valor deste parametro que será o valor do registro Val_Atual da tabela NRO_ATUAL

Espero que funcione.


Responder

29/12/2003

Marcelo.l

Deu Certo.

Valeu!!!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar