problema com stored procedure
25/05/2005
0
ola ... tudo bem ??
estou com um problema em uma stored procedure q é o seguinte:
em minha aplicação existe algumas tabelas q naum tem chave automática (autoincrent) para essas tabelas existe uma tabela de ´indice´ q tem para cada tabela um campo ex: IND_CLIENTE (tab. cliente), IND_PRODUTO (tab. produto), etc... bem criei uma stored procedure q gerará o codigo para mim com o seguinte esquema:
CREATE PROCEDURE cp_GeraIndice(@campo varchar(50)) AS
set nocount on
EXEC(´update INDICE set IND_´ + @campo + ´ = (select (IND_´ + @campo + ´ + 1) from INDICE)´)
return(select IND_CLIENTE (aqui no caso teria q entrar a variavel campo para saber qual tabela se refere) from INDICE)
set nocount off
GO
meu problema esta na hora de capturar o retorno do codigo gerado ... pois o parametro @campo vem o nome da tabela q é para ser gerado o indice ... isso esta funcionando ... mas como pegar o retorno ?
Grato
Enderson
estou com um problema em uma stored procedure q é o seguinte:
em minha aplicação existe algumas tabelas q naum tem chave automática (autoincrent) para essas tabelas existe uma tabela de ´indice´ q tem para cada tabela um campo ex: IND_CLIENTE (tab. cliente), IND_PRODUTO (tab. produto), etc... bem criei uma stored procedure q gerará o codigo para mim com o seguinte esquema:
CREATE PROCEDURE cp_GeraIndice(@campo varchar(50)) AS
set nocount on
EXEC(´update INDICE set IND_´ + @campo + ´ = (select (IND_´ + @campo + ´ + 1) from INDICE)´)
return(select IND_CLIENTE (aqui no caso teria q entrar a variavel campo para saber qual tabela se refere) from INDICE)
set nocount off
GO
meu problema esta na hora de capturar o retorno do codigo gerado ... pois o parametro @campo vem o nome da tabela q é para ser gerado o indice ... isso esta funcionando ... mas como pegar o retorno ?
Grato
Enderson
Ezdala
Curtir tópico
+ 0
Responder
Posts
25/05/2005
Marcus.magalhaes
Boa tarde.
vc deve usar um parametro de output.
Ex.: Create Procedure TESTE (@campo_entrada VarChar(10), @retorno Int OUTPUT)
As
Begin
update tbl_name
set colunax = @campo_entrada
Where condicao
Select @retorno = colunax From tbl_name Where condição
End
GO
Dessa forma a variável @retorno terá o valor da colunax.
[b:5330402929]PS.: Gostaria de salientar que esta forma de fazer o ´autoincremento´ é extremamente prejudicial ao banco, pois gerará uma concorrencia de acesso desnecessária. Outro ponto importante é o risco de que sejam geradas chaves duplicadas.
Recomendo fortemente que seja usado o IDENTITY ao invés desta forma que vc está em dúvida.[/b:5330402929]
Espero ter ajudado.
Att,
vc deve usar um parametro de output.
Ex.: Create Procedure TESTE (@campo_entrada VarChar(10), @retorno Int OUTPUT)
As
Begin
update tbl_name
set colunax = @campo_entrada
Where condicao
Select @retorno = colunax From tbl_name Where condição
End
GO
Dessa forma a variável @retorno terá o valor da colunax.
[b:5330402929]PS.: Gostaria de salientar que esta forma de fazer o ´autoincremento´ é extremamente prejudicial ao banco, pois gerará uma concorrencia de acesso desnecessária. Outro ponto importante é o risco de que sejam geradas chaves duplicadas.
Recomendo fortemente que seja usado o IDENTITY ao invés desta forma que vc está em dúvida.[/b:5330402929]
Espero ter ajudado.
Att,
Responder
25/05/2005
Ezdala
obrigado pela resposta Marcos, eu concordo com vc q o uso do IDENTITY é sem sombra de dúvida a melhor forma de gerar valor para o campos chaves, so q o nesse caso, o banco recebe informações de um outro banco ´remoto´ sendo q nesse banco ´remoto´ são gerado e enviados os registros (clientes, pedidos etc...) para esse banco central onde tem um prg gerenciador q ficha checando a chegada desses arquivos (xml) de tempo em tempo ... a ´retirada´ do identity é pq foi decidido q as estruturas dos bancos tem q ser a mesma, e para preservar o mesmo codigo. Bem naum sei se vc entendeu ... mas tudo bem :)
Bem naum sei o q fiz de errado mas, eu naum consegui executar a stored procedure q vc colocou de exemplo gerou um erro na ´colunax´ mas na minha realidade ficaria assim:
create procedure ... as
update INDICE set coluna = @campo_entrada + 1 (não ha condição pq essa tabela so tem 1 registro)
select @retorno = colunax from indice (não ha condição pq essa tabela so tem 1 registro)
grato
Enderson
Bem naum sei o q fiz de errado mas, eu naum consegui executar a stored procedure q vc colocou de exemplo gerou um erro na ´colunax´ mas na minha realidade ficaria assim:
create procedure ... as
update INDICE set coluna = @campo_entrada + 1 (não ha condição pq essa tabela so tem 1 registro)
select @retorno = colunax from indice (não ha condição pq essa tabela so tem 1 registro)
grato
Enderson
Responder
Clique aqui para fazer login e interagir na Comunidade :)