Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Juliano.net

Erro em procedure recursiva

Recommended Posts

Galera criei uma procedure que vai se executando em loops e fazer inserts em uma variável do tipo TABLE, mas tive erros ao executá-la.Código da procedure:

-- Drop stored procedure if it already existsIF EXISTS (  SELECT * 	FROM INFORMATION_SCHEMA.ROUTINES    WHERE SPECIFIC_SCHEMA = N'dbo'	 AND SPECIFIC_NAME = N'sp_lista' )   DROP PROCEDURE dbo.sp_listaGOCREATE PROCEDURE dbo.sp_lista @ID int = 0ASBEGIN DECLARE @cd_categoria int, @ds_categoria varchar(70), @cd_categoriamae int, @bl_adulto bit DECLARE @Saida TABLE(  cd_categoria int primary key,  ds_categoria varchar(70),  cd_categoriamae int,  bl_adulto bit ) If @ID = 0 BEGIN  DECLARE mCURSOR CURSOR FOR  SELECT *  FROM Categorias  WHERE cd_categoriamae is null  OPEN mCURSOR  FETCH NEXT FROM mCURSOR  INTO @cd_categoria,@ds_categoria,@cd_categoriamae,@bl_adulto END Else BEGIN  DECLARE mCURSOR2 CURSOR FOR  SELECT *  FROM Categorias  WHERE cd_categoriamae = @ID  OPEN mCURSOR2  FETCH NEXT FROM mCURSOR2  INTO @cd_categoria,@ds_categoria,@cd_categoriamae,@bl_adulto END WHILE @@FETCH_STATUS = 0 BEGIN  INSERT INTO @Saida  VALUES(@cd_categoria,@ds_categoria,@cd_categoriamae,@bl_adulto)  INSERT INTO @Saida  EXEC dbo.sp_lista @cd_categoria  If @ID = 0  BEGIN   FETCH NEXT FROM mCURSOR   INTO @cd_categoria,@ds_categoria,@cd_categoriamae,@bl_adulto  END  Else  BEGIN   FETCH NEXT FROM mCURSOR   INTO @cd_categoria,@ds_categoria,@cd_categoriamae,@bl_adulto  END END  If @ID = 0 BEGIN  CLOSE mCURSOR  DEALLOCATE mCURSOR END Else BEGIN  CLOSE mCURSOR2  DEALLOCATE mCURSOR2 END  SELECT * FROM @SaidaENDGO-- =============================================-- Example to execute the stored procedure-- =============================================EXECUTE dbo.sp_lista 0GO
Mensagem de erro........

(1 row(s) affected)Msg 8164, Level 16, State 1, Procedure sp_lista, Line 43An INSERT EXEC statement cannot be nested.Msg 8164, Level 16, State 1, Procedure sp_lista, Line 43An INSERT EXEC statement cannot be nested.(2 row(s) affected)(3 row(s) affected)

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSERT INTO @Saida  EXEC dbo.sp_lista @cd_categoria

Sugestão que eu lhe dou e colocar entre parenteses o nome da store procedure, ou usar execute em vez de exec.

 

Se resolver, gostaria de saber.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

falai Juliano beleza,

 

putz nunca tentei fazer um insert em uma tabela apartir do resultado de uma proc, isso funciona msm?

 

INSERT INTO @Saida  EXEC dbo.sp_lista @cd_categoria
e se for mudado isto pra uma função (function) será q naum rola?

pq. com função sei q funega esse skema de gravar pra uma tabela direto:

tipo assim:

select * into #teste from pubs.dbo.SalesByStore(6380)
onde SalesByStore é uma função com retorno do tipo TABLE

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.