none
Depurar Stored Procedure RRS feed

  • Pergunta

  • Bom dia Sr(s),

    Pessoal como eu poderia depurar a stored Procedure abaixo, atualmente estou utilizando a versão 2008.

    USE [MP10]
    GO
    /****** Object:  StoredProcedure [dbo].[USP_CONTAS_11]    Script Date: 10/06/2009 09:37:36 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    ALTER PROCEDURE [dbo].[USP_CONTAS_11](@cResult nvarchar(1) output )
    	AS 
    	DECLARE @cFilial varchar(02)
    	DECLARE @cConta  varchar(15)
    	DECLARE @nRec int            
    	
    	--Seta resultado = 0 = ERRO / 1 = OK
    	Set @cResult = '0'
    
    BEGIN	                     
    	DECLARE CT1_Cursor insensitive 
    		
    	CURSOR FOR                     
    		SELECT 
    			TM.CT1_FILIAL, TM.CT1_CONTA
    		FROM 
    			CT1950 TM LEFT JOIN CT1110 T1 
    				ON TM.CT1_FILIAL = T1.CT1_FILIAL AND TM.CT1_CONTA = T1.CT1_CONTA AND T1.D_E_L_E_T_ = ''
    		WHERE 
    			TM.D_E_L_E_T_ = '' 
    		AND	T1.CT1_CONTA IS NULL
    
    	--Abre o Cursor
    	FOR READ ONLY    
    	OPEN CT1_Cursor
    		--Carrega valores para o Cursor
    		FETCH CT1_Cursor     
    		INTO 
    			@cFilial,				
    			@cConta
    		BEGIN TRAN     
    			--Inicio do processamento
    			WHILE (@@Fetch_Status  = 0 ) BEGIN                 
    
    				--Seta o proximo do Recno	
    --				Select @nRec = ISNULL(MAX(R_E_C_N_O_),0)+1 FROM CT1110
    
    				--Insere os registros de acordo com o cursor	
    				INSERT INTO CT1110 ( CT1_FILIAL, CT1_CONTA, CT1_DESC01, CT1_DESC02, CT1_DESC03, CT1_DESC04, CT1_DESC05, CT1_CLASSE, CT1_NORMAL, CT1_RES, CT1_BLOQ, CT1_DTBLIN, CT1_DTBLFI, CT1_DC, CT1_NCUSTO, CT1_CC, CT1_CVD02, CT1_CVD03, CT1_CVD04, CT1_CVD05, CT1_CVC02, CT1_CVC03, CT1_CVC04, CT1_CVC05, CT1_CTASUP, CT1_HP, CT1_ACITEM, CT1_ACCUST, CT1_ACCLVL, CT1_DTEXIS, CT1_DTEXSF, CT1_CTAVM, CT1_CTARED, CT1_CTALP, CT1_CTAPON, CT1_BOOK, CT1_GRUPO, CT1_AGLSLD, CT1_RGNV1, CT1_RGNV2, CT1_RGNV3, CT1_CCOBRG, CT1_ITOBRG, CT1_CLOBRG, CT1_LALUR, CT1_AGLUT, CT1_TRNSEF, CT1_CTLALU, CT1_ESTOUR, CT1_CODIMP, CT1_RATEIO, CT1_AJ_INF, CT1_USERGI, CT1_USERGA, CT1_TPLALU, D_E_L_E_T_, R_E_C_N_O_, CT1_DESC06, CT1_CVD06, CT1_CVC06, CT1_NTSPED, CT1_LALHIR  )
    							  SELECT CT1_FILIAL, CT1_CONTA, CT1_DESC01, CT1_DESC02, CT1_DESC03, CT1_DESC04, CT1_DESC05, CT1_CLASSE, CT1_NORMAL, CT1_RES, CT1_BLOQ, CT1_DTBLIN, CT1_DTBLFI, CT1_DC, CT1_NCUSTO, CT1_CC, CT1_CVD02, CT1_CVD03, CT1_CVD04, CT1_CVD05, CT1_CVC02, CT1_CVC03, CT1_CVC04, CT1_CVC05, CT1_CTASUP, CT1_HP, CT1_ACITEM, CT1_ACCUST, CT1_ACCLVL, CT1_DTEXIS, CT1_DTEXSF, CT1_CTAVM, CT1_CTARED, CT1_CTALP, CT1_CTAPON, CT1_BOOK, CT1_GRUPO, CT1_AGLSLD, CT1_RGNV1, CT1_RGNV2, CT1_RGNV3, CT1_CCOBRG, CT1_ITOBRG, CT1_CLOBRG, CT1_LALUR, CT1_AGLUT, CT1_TRNSEF, CT1_CTLALU, CT1_ESTOUR, CT1_CODIMP, CT1_RATEIO, CT1_AJ_INF, CT1_USERGI, CT1_USERGA, CT1_TPLALU, D_E_L_E_T_, R_E_C_N_O_, CT1_DESC06, CT1_CVD06, CT1_CVC06, CT1_NTSPED, CT1_LALHIR-- , CT1_SPEDST 
    							  FROM CT1950 WHERE CT1_FILIAL = @cFilial AND CT1_CONTA = @cConta
    		
    				RAISERROR('VAI 1',16,1) 
    				Set @cResult = '1'               
    				--Proximo registro
    				FETCH CT1_Cursor     
    				INTO 
    					@cFilial,				
    					@cConta				
    			END	
    		END         
    		
    	--Fecha o Cursor
    	CLOSE CT1_Cursor           
    	DEALLOCATE CT1_Cursor
    	IF @@ERROR <> 0 
    		BEGIN 
    		RAISERROR('NÃO FOI POSSÍVEL GRAVAR NA BASE DO MICROSIGA.',16,1) 
    		ROLLBACK TRAN
    		RETURN
    	END
    
    	COMMIT TRAN
    
    	--Seta retorno OK = Result = '1'
    	Set @cResult = '1'               

    W.Marrane
    terça-feira, 6 de outubro de 2009 12:48

Respostas

  • Bom Dia,

    Se você faz um simples loop para posteriormente inserir, não seria mais prudente fazer o INSERT com SELECT ? Ou será que há uma trigger no meio que necessite que o processo seja feito linha a linha ?

    Para debugar no 2008, basta utilizar o SQL Server Management Studio 2008, há um menu de DEBUG.

    [ ]s,
     
    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    O princípio de Pareto, a curva ABC e consultas SQL
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!740.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Fernanda Simões quinta-feira, 8 de outubro de 2009 14:34
    terça-feira, 6 de outubro de 2009 13:40
  • Marrane,

    Concordo plenamente com o Gustavo, se basicamente você vai inserir dados de um table em outro o Insert ... Select vai atender plenamente.

    No SQL Server 2008, dentro do Management Studio, basta você selecionar a sua Stored Procedure e clicar no Menu Debug ou Depurar, além disso, o atalho Alt+F5 poderá ser utilizado para iniciar a depuração.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta Fernanda Simões quinta-feira, 8 de outubro de 2009 14:34
    terça-feira, 6 de outubro de 2009 14:54

Todas as Respostas

  • Bom Dia,

    Se você faz um simples loop para posteriormente inserir, não seria mais prudente fazer o INSERT com SELECT ? Ou será que há uma trigger no meio que necessite que o processo seja feito linha a linha ?

    Para debugar no 2008, basta utilizar o SQL Server Management Studio 2008, há um menu de DEBUG.

    [ ]s,
     
    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    O princípio de Pareto, a curva ABC e consultas SQL
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!740.entry
    Classifique as respostas. O seu feedback é imprescindível
    • Marcado como Resposta Fernanda Simões quinta-feira, 8 de outubro de 2009 14:34
    terça-feira, 6 de outubro de 2009 13:40
  • Marrane,

    Concordo plenamente com o Gustavo, se basicamente você vai inserir dados de um table em outro o Insert ... Select vai atender plenamente.

    No SQL Server 2008, dentro do Management Studio, basta você selecionar a sua Stored Procedure e clicar no Menu Debug ou Depurar, além disso, o atalho Alt+F5 poderá ser utilizado para iniciar a depuração.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    • Marcado como Resposta Fernanda Simões quinta-feira, 8 de outubro de 2009 14:34
    terça-feira, 6 de outubro de 2009 14:54
  • Infelizmente não posso, seria a melhor de forma, porém possuimos tabelas com as mesmas caracteristicas, porém com algumas particularidades que impedem o select.

    E passo esta procedure por um código que efetuar um outro tratamento.

    Mas obrigado.
    W.Marrane
    sexta-feira, 9 de outubro de 2009 11:18