Ir para conteúdo

POWERED BY:

Arquivado

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

Brunooopp

Procedure funciona no sql 2000 mas nao no sql 2005

Recommended Posts

Galera,

Boa Tarde!

 

A minha procedure funciona bem no sql 2000, mas no sql 2005 ela não sai do status de "executando".

Por favor, se alguem puder me ajudar, segue a chamada da procedure e logo após a propria procedure.

 

Chamada:

declare @p4 int
set @p4=null
exec upReducaoCompoProjeto 200906079,2,'C',@p4 output
select @p4

Procedure:

USE [BD_orcamento]
GO
/****** Object:  StoredProcedure [dbo].[upReducaoCompoProjeto]    Script Date: 07/23/2009 11:17:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO



/****** Object:  Stored Procedure dbo.upReducaoCompoProjeto    Script Date: 20/06/2000 16:00:46 ******/
ALTER PROCEDURE [dbo].[upReducaoCompoProjeto]
 ( @cdProjeto int,@cdCenario int, @tpPlanilha char(1), @erro int OUTPUT ) AS

   BEGIN TRANSACTION
   SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

   SET NOCOUNT ON 

   DECLARE @stPropagaBiblio 	CHAR(1)
   DECLARE @stNivelCusto 	CHAR(1)
   DECLARE @stNivelVenda 	CHAR(1)
   DECLARE @Label               VARCHAR(255)
   DECLARE @tpPlanilhaAux 	CHAR(1)
   DECLARE @tpPlanilhaNovaAux 	CHAR(1)
   DECLARE @cdFormulaCoefNova   INT
   DECLARE @cdFormulaNova   	INT
   DECLARE @idInsumoAux		INT
   DECLARE @idComposicaoAux	INT

   SELECT @erro = 0

   -- Verifica os parametros do Sistema
   SELECT @stPropagaBiblio =  stPropagaBiblio, -- se propaga ou nao
          @stNivelCusto =  stNivelCusto ,
          @stNivelVenda =  stNivelVenda
    FROM Parametros

   SELECT DISTINCT idComposicao=cdItemServico
     INTO #Composicao
     FROM Servico 
    WHERE tpItemServico = "C"
      AND cdProjeto = @cdProjeto    
      AND tpPlanilha = @tpPlanilha    
      AND ( (cdCenario = @cdCenario )
       OR ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) ) )

   SELECT DISTINCT idComposicao,idItemComposicao  
     INTO #ItemComposicao
     FROM ItemComposicao 
    WHERE stitemComposicao = "C"
      AND cdProjeto = @cdProjeto
      AND tpPlanilha = @tpPlanilha
      AND ( ( cdCenario = @cdCenario )
       OR ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) ) )

   SELECT DISTINCT idComposicao=IC.idItemComposicao  
     INTO #ComposicaoAuxiliar 
     FROM #ItemComposicao IC, #Composicao C
    WHERE IC.idComposicao = C.idComposicao
      AND NOT EXISTS ( SELECT "X" FROM #Composicao C2 WHERE C2.idComposicao = IC.idItemComposicao)

   WHILE (SELECT count(*) FROM #ComposicaoAuxiliar) <> 0
   BEGIN
     INSERT #Composicao
     SELECT DISTINCT idComposicao
       FROM #ComposicaoAuxiliar CA

     TRUNCATE TABLE #ComposicaoAuxiliar

     INSERT #ComposicaoAuxiliar 
     SELECT DISTINCT idComposicao=IC.idItemComposicao  
       FROM #ItemComposicao IC, #Composicao C
      WHERE IC.idComposicao = C.idComposicao
        AND NOT EXISTS ( SELECT "X" FROM #Composicao C2 WHERE C2.idComposicao = IC.idItemComposicao)

     CONTINUE

   END

   -- Abre um cursor pra excluir os itens das composições
   SELECT DISTINCT idComposicao
     INTO #ComposicoesAExcluir 
     FROM Composicao C1
    WHERE cdProjeto = @cdProjeto
      AND cdCenario = @cdCenario
      AND tpPlanilha = @tpPlanilha
      AND NOT EXISTS ( SELECT "X" FROM #Composicao C2 WHERE C1.idComposicao = C2.idCOmposicao )
      AND tpComposicao = "N"
   ORDER BY idComposicao

  DELETE ValorVariavelFormula
   WHERE idComposicao IN ( SELECT idComposicao FROM #ComposicoesAExcluir)
     AND cdProjeto = @cdProjeto
     AND tpPlanilha = @tpPlanilha 
     AND ( ( cdCenario = @cdCenario )
      OR ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) ) )

  DELETE ItemComposicao
   WHERE idComposicao IN ( SELECT idComposicao FROM #ComposicoesAExcluir)
     AND cdProjeto = @cdProjeto
     AND tpPlanilha = @tpPlanilha
     AND ( ( cdCenario = @cdCenario )
      OR ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) ) )

  DELETE ValorVariavelFormulaProjeto
   WHERE idComposicao IN ( SELECT idComposicao FROM #ComposicoesAExcluir)
     AND cdProjeto = @cdProjeto
     AND ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR
           ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) )

  DELETE ItemComposicaoProjeto
   WHERE idComposicao IN ( SELECT idComposicao FROM #ComposicoesAExcluir)
     AND cdProjeto = @cdProjeto
     AND ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR
           ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) )

  DELETE Composicao
   WHERE idComposicao IN ( SELECT idComposicao FROM #ComposicoesAExcluir)
     AND cdProjeto = @cdProjeto
     AND tpPlanilha = @tpPlanilha
     AND ( ( cdCenario = @cdCenario )
      OR ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) ) )

  DELETE ComposicaoProjeto
   WHERE idComposicao IN ( SELECT idComposicao FROM #ComposicoesAExcluir)
     AND cdProjeto = @cdProjeto
     AND ( ( @tpPlanilha = "C" AND @stNivelCusto = "P" ) OR
           ( @tpPlanilha = "V" AND @stNivelVenda = "P" ) )

  -- Limpeza da Biblioteca
  IF (SELECT count(*) FROM BiblioComposicao 
       WHERE tpEscopoComposicao = "E"
         AND NOT EXISTS (SELECT "X" FROM Composicao WHERE Composicao.idComposicao = BiblioComposicao.idComposicao))<>0
  BEGIN         
    DELETE BC
      FROM BiblioComposicao BC
     WHERE tpEscopoComposicao = "E"
       AND NOT EXISTS (SELECT "X" FROM Composicao C
                        WHERE C.idComposicao = BC.idComposicao )

    DELETE BF
      FROM BiblioFormulaProducao BF
     WHERE BF.tpEscopoFormula = "E"
       AND 0 = (SELECT COUNT(*) FROM FormulaProducao V
                 WHERE BF.cdFormula = V.cdFormula )

    DELETE BVP 
      FROM BiblioVariavelProducao BVP
     WHERE BVP.tpEscopoVariavel = "E"
       AND 0 = (SELECT COUNT(*) FROM VariavelProducao VP
                 WHERE BVP.idVarproducao = VP.idVarproducao ) 

    DELETE BF
      FROM BiblioFormulaCoeficiente BF
     WHERE tpEscopoFormulaCoeficiente = "E"
       AND 0 = ( SELECT Count(*) FROM FormulaCoeficiente F 
                  WHERE BF.cdFormulaCoef = F.cdFormulaCoef )
   END

   SELECT @erro = 0

   COMMIT TRANSACTION
   RETURN

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brunooopp

 

você fez um restore do banco de dados que estava na versão 2000 para um servidor 2005? Se for esse o caso seria interessante desfragmentar ou até reconstruir alguns índices.

 

Utilize o "Database Engine Tuning Advisor" para analisar melhor o banco de dados e ver o que pode ser melhorado.

 

Quanto a procedure, recompilar pode ajudar. Ex: ALTER PROCEDURE nome WITH RECOMPILE...

 

[]'S

 

Fernando Silveira

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.