none
StoreProcedure RRS feed

  • Pergunta

  • Boa Noite a todos, pessoal tenho essa procedure no sistema que atualiza os 5 preços do meu fornecedores, ela criou uma tabela chamada de ZPRECOSCOTADOS, porem quando eu faço um select nessa tabela ZPRECOSCOTADOS, esses campos estao nulos..
    O que pode ser isso.estou perdido com essa situacao..
    Obrigado a todos

    procedure
    CREATE PROCEDURE [dbo].[SP_ZPRECOSCOTADOS]
    (
    @CODCOTACAO DTCODIGO,
    @CODCOLIGADA DCODCOLIGADA
    )
    AS

    /* DECLARAÇÃO DE VARIÁVEIS */
    DECLARE
     /* PRODUTOS */
     @IDPRD INT,
     @CODIGOPRD VARCHAR(30),
     @IDMOV INT,
     @NOMEFANTASIA VARCHAR(100),
     @CODUNDCONTROLE VARCHAR(5),
     @QUANTIDADE NUMERIC(10, 2),
     @PRECO1 NUMERIC(10, 2),
     @PRECO2 NUMERIC(10, 2),
     @PRECO3 NUMERIC(10, 2),
     @PRECO4 NUMERIC(10, 2),
     @PRECO5 NUMERIC(10, 2),
     @PRECONEG1 NUMERIC(10, 2),
     @PRECONEG2 NUMERIC(10, 2),
     @PRECONEG3 NUMERIC(10, 2),
     @PRECONEG4 NUMERIC(10, 2),
     @PRECONEG5 NUMERIC(10, 2),
     @MENORPRECO NUMERIC(10, 2),

     /* ORÇAMENTOS */
     @CODCFO VARCHAR(25),
     @VALCOTACAO NUMERIC(10, 2),
     @VALNEGOCIADO NUMERIC(10, 2),
     
     /* UTEIS */
     @CONT_CFO INT

    /* VERIFICA SE A TABELA CUSTOMIZADA ZPRECOSCOTADOS JÁ EXISTE NO BANCO DE DADOS. SE NÃO EXISTIR, A TABELA SERÁ CRIADA*/
    IF NOT EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE = 'U' AND NAME = 'ZPRECOSCOTADOS')
    BEGIN
     
     /* CRIANDO TABELA CUSTOMIZADA ZPRECOSCOTADOS*/
     CREATE TABLE ZPRECOSCOTADOS
     (
      CODCOTACAO DTCODIGO NOT NULL,
      CODCOLIGADA DCODCOLIGADA NOT NULL,
      IDPRD INT NOT NULL,
      IDMOV INT NOT NULL,
      CODIGOPRD VARCHAR (30) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
      NOMEFANTASIA VARCHAR (100) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
      CODUNDCONTROLE VARCHAR (5) COLLATE SQL_Latin1_General_CP1_CI_AI NULL,
      QUANTIDADE NUMERIC(10, 2) NULL,
      PRECO1 NUMERIC(10, 2) NULL,
      PRECO2 NUMERIC(10, 2) NULL,
      PRECO3 NUMERIC(10, 2) NULL,
      PRECO4 NUMERIC(10, 2) NULL,
      PRECO5 NUMERIC(10, 2) NULL,
      PRECONEG1 NUMERIC(10, 2),
      PRECONEG2 NUMERIC(10, 2),
      PRECONEG3 NUMERIC(10, 2),
      PRECONEG4 NUMERIC(10, 2),
      PRECONEG5 NUMERIC(10, 2),
      MENORPRECO NUMERIC(10, 2) NULL,
      CONSTRAINT PK_ZPRECOSCOTADOS PRIMARY KEY(CODCOTACAO, CODCOLIGADA, IDPRD, IDMOV)
     )
    END

    DELETE
    FROM
     ZPRECOSCOTADOS
    WHERE
     ZPRECOSCOTADOS.CODCOTACAO = @CODCOTACAO
     AND ZPRECOSCOTADOS.CODCOLIGADA = @CODCOLIGADA

    /* DECLARANDO CURSOR DE PRODUTOS DE UMA COTAÇÃO */
    DECLARE C_PRECOS CURSOR FOR
     SELECT
      TPRD.IDPRD,
      TCCOTACAOITMMOV.IDMOV,
      TPRD.CODIGOPRD,
      TPRD.NOMEFANTASIA,
      TPRD.CODUNDCONTROLE,
      TITMMOV.QUANTIDADE
     FROM
      TCCOTACAOITMMOV
       JOIN TITMMOV ON
        TCCOTACAOITMMOV.IDMOV = TITMMOV.IDMOV
        AND TCCOTACAOITMMOV.CODCOLIGADA = TITMMOV.CODCOLIGADA
        AND TCCOTACAOITMMOV.NSEQITMMOV = TITMMOV.NSEQITMMOV
       JOIN TPRD ON
        TITMMOV.IDPRD = TPRD.IDPRD
        AND TITMMOV.CODCOLIGADA = TPRD.CODCOLIGADA
       JOIN TMOV ON
        TITMMOV.IDMOV = TMOV.IDMOV
        AND TITMMOV.CODCOLIGADA = TMOV.CODCOLIGADA
     WHERE
      TCCOTACAOITMMOV.CODCOTACAO = @CODCOTACAO
      AND TCCOTACAOITMMOV.CODCOLIGADA = @CODCOLIGADA

    OPEN C_PRECOS
    FETCH NEXT FROM C_PRECOS INTO @IDPRD, @IDMOV, @CODIGOPRD, @NOMEFANTASIA, @CODUNDCONTROLE, @QUANTIDADE

    WHILE @@FETCH_STATUS = 0
    BEGIN
     DECLARE C_FORNECEDORES CURSOR FOR
      SELECT
       TCITMORCAMENTO.CODCFO,
       TCITMORCAMENTO.VALCOTACAO,
       TCITMORCAMENTO.VALNEGOCIADO
      FROM
       TCITMORCAMENTO
      WHERE
       TCITMORCAMENTO.IDPRD = @IDPRD
       AND TCITMORCAMENTO.IDMOV =  @IDMOV
       AND TCITMORCAMENTO.CODCOTACAO = @CODCOTACAO
       AND TCITMORCAMENTO.CODCOLIGADA = @CODCOLIGADA
       AND (TCITMORCAMENTO.VALCOTACAO > 0 OR TCITMORCAMENTO.VALNEGOCIADO > 0)
      ORDER BY
       TCITMORCAMENTO.CODCFO
     
     OPEN C_FORNECEDORES
     FETCH NEXT FROM C_FORNECEDORES INTO @CODCFO, @VALCOTACAO, @VALNEGOCIADO
     
     SET @CONT_CFO = 1
     
     WHILE @@FETCH_STATUS = 0
     BEGIN
      IF @CONT_CFO = 1
       SET @MENORPRECO = @VALNEGOCIADO
      ELSE
       IF @VALNEGOCIADO <> 0 AND @VALNEGOCIADO < @MENORPRECO
        SET @MENORPRECO = @VALNEGOCIADO
      
      IF @CONT_CFO = 1
      BEGIN
       SET @PRECO1 = @VALCOTACAO
       SET @PRECONEG1 = @VALNEGOCIADO
      END
      ELSE
       IF @CONT_CFO = 2
       BEGIN
        SET @PRECO2 = @VALCOTACAO
        SET @PRECONEG2 = @VALNEGOCIADO
       END
       ELSE
        IF @CONT_CFO = 3
        BEGIN
         SET @PRECO3 = @VALCOTACAO
         SET @PRECONEG3 = @VALNEGOCIADO
        END
        ELSE
         IF @CONT_CFO = 4
         BEGIN
          SET @PRECO4 = @VALCOTACAO
          SET @PRECONEG4 = @VALNEGOCIADO
         END
         ELSE
          IF @CONT_CFO = 5
          BEGIN
           SET @PRECO5 = @VALCOTACAO
           SET @PRECONEG5 = @VALNEGOCIADO
          END
      
      SET @CONT_CFO = @CONT_CFO + 1
      FETCH NEXT FROM C_FORNECEDORES INTO @CODCFO, @VALCOTACAO, @VALNEGOCIADO
      
      IF NOT EXISTS
      (
      SELECT
       1
      FROM
       ZPRECOSCOTADOS
      WHERE
       ZPRECOSCOTADOS.CODCOTACAO = @CODCOTACAO
       AND ZPRECOSCOTADOS.CODCOLIGADA = @CODCOLIGADA
       AND ZPRECOSCOTADOS.IDPRD = @IDPRD
       AND ZPRECOSCOTADOS.IDMOV = @IDMOV
      )
       INSERT INTO ZPRECOSCOTADOS
        (CODCOTACAO, CODCOLIGADA, IDPRD, IDMOV, CODIGOPRD, NOMEFANTASIA, CODUNDCONTROLE, QUANTIDADE,
        PRECO1, PRECO2, PRECO3, PRECO4, PRECO5, PRECONEG1, PRECONEG2, PRECONEG3, PRECONEG4, PRECONEG5,
        MENORPRECO)
       VALUES
        (@CODCOTACAO, @CODCOLIGADA, @IDPRD, @IDMOV, @CODIGOPRD, @NOMEFANTASIA, @CODUNDCONTROLE,
        @QUANTIDADE, @PRECO1, @PRECO2, @PRECO3, @PRECO4, @PRECO5, @PRECONEG1, @PRECONEG2, @PRECONEG3,
        @PRECONEG4, @PRECONEG5, @MENORPRECO)
      ELSE
       UPDATE
        ZPRECOSCOTADOS
       SET
        ZPRECOSCOTADOS.CODCOTACAO = @CODCOTACAO,
        ZPRECOSCOTADOS.CODCOLIGADA = @CODCOLIGADA,
        ZPRECOSCOTADOS.IDPRD = @IDPRD,
        ZPRECOSCOTADOS.IDMOV = @IDMOV,
        ZPRECOSCOTADOS.CODIGOPRD = @CODIGOPRD,
        ZPRECOSCOTADOS.NOMEFANTASIA = @NOMEFANTASIA,
        ZPRECOSCOTADOS.CODUNDCONTROLE = @CODUNDCONTROLE,
        ZPRECOSCOTADOS.QUANTIDADE = @QUANTIDADE,
        ZPRECOSCOTADOS.PRECO1 = @PRECO1,
        ZPRECOSCOTADOS.PRECO2 = @PRECO2,
        ZPRECOSCOTADOS.PRECO3 = @PRECO3,
        ZPRECOSCOTADOS.PRECO4 = @PRECO4,
        ZPRECOSCOTADOS.PRECO5 = @PRECO5,
        ZPRECOSCOTADOS.PRECONEG1 = @PRECONEG1,
        ZPRECOSCOTADOS.PRECONEG2 = @PRECONEG2,
        ZPRECOSCOTADOS.PRECONEG3 = @PRECONEG3,
        ZPRECOSCOTADOS.PRECONEG4 = @PRECONEG4,
        ZPRECOSCOTADOS.PRECONEG5 = @PRECONEG5,
        ZPRECOSCOTADOS.MENORPRECO = @MENORPRECO
       WHERE
        ZPRECOSCOTADOS.CODCOTACAO = @CODCOTACAO
        AND ZPRECOSCOTADOS.CODCOLIGADA = @CODCOLIGADA
        AND ZPRECOSCOTADOS.IDPRD = @IDPRD
        AND ZPRECOSCOTADOS.IDMOV = @IDMOV
     END
     
     CLOSE C_FORNECEDORES
     DEALLOCATE C_FORNECEDORES
     
     FETCH NEXT FROM C_PRECOS INTO @IDPRD, @IDMOV, @CODIGOPRD, @NOMEFANTASIA, @CODUNDCONTROLE, @QUANTIDADE
     
    END

    CLOSE C_PRECOS
    DEALLOCATE C_PRECOS

    terça-feira, 22 de setembro de 2009 21:02

Respostas

  • Ronnie,

    Você pode montar a sua procedure desse jeito
    	with tabelaPrecos ( valcotacao, valnegociado, numLinha )
    	(	select codcfo, valcotacao, valnegociado
    		 row_number() over ( order by codcfo) as numLinha  
    		from tcitmorcamento
    		where tcitmorcamento.idprd = @idprd
    		 and tcitmorcamento.idmov =  @idmov
    		 and tcitmorcamento.codcotacao = @codcotacao
    		 and tcitmorcamento.codcoligada = @codcoligada
    		 and (tcitmorcamento.valcotacao > 0 or tcitmorcamento.valnegociado > 0)	)
    
    
    	with valoresSeparados (	precoCotado_01, precoCotado_02, precoCotado_03, precoCotado_04, 
    							precoCotado_05, precoNegociado_01, precoNegociado_02, precoNegociado_03, 
    							precoNegociado_04, precoNegociado_05, precoMenor )
    	(	select precoCotado_01 = sum(case numLinha when 1 then valcotacao else null),	
    		 precoNegociado_01 = sum(case numLinha when 1 then valnegociado else null),
    		 precoCotado_02 = sum(case numLinha when 2 then valcotacao else null),	
    		 precoNegociado_02 = sum(case numLinha when 2 then valnegociado else null),
    		 precoCotado_03 = sum(case numLinha when 3 then valcotacao else null),	
    		 precoNegociado_03 = sum(case numLinha when 3 then valnegociado else null),
    		 precoCotado_04 = sum(case numLinha when 4 then valcotacao else null),	
    		 precoNegociado_04 = sum(case numLinha when 4 then valnegociado else null),
    		 precoCotado_05 = sum(case numLinha when 5 then valcotacao else null),	
    		 precoNegociado_05 = sum(case numLinha when 5 then valnegociado else null),
    		 precoMenor = min(valnegociado)
    		from tabelaPrecos	)
    
    
    	select @idprd = tprd.idprd, @idmov = tccotacaoitmmov.idmov, @codigoprd = tprd.codigoprd, 
    	 @nomefantasia = tprd.nomefantasia, @codundcontrole = tprd.codundcontrole, @quantidade = titmmov.quantidade
    	from tccotacaoitmmov
    	 join titmmov 
    		on tccotacaoitmmov.idmov = titmmov.idmov
    		 and tccotacaoitmmov.codcoligada = titmmov.codcoligada
    		 and tccotacaoitmmov.nseqitmmov = titmmov.nseqitmmov
    	 join tprd 
    		on titmmov.idprd = tprd.idprd
    		 and titmmov.codcoligada = tprd.codcoligada
    	 join tmov 
    		on titmmov.idmov = tmov.idmov
    		 and titmmov.codcoligada = tmov.codcoligada
    	where tccotacaoitmmov.codcotacao = @codcotacao
    	and tccotacaoitmmov.codcoligada = @codcoligada
    
    	update zprecoscotados
    	set codcotacao = @codcotacao, codcoligada = @codcoligada, idprd = @idprd, idmov = @idmov, codigoprd = @codigoprd,
    	 nomefantasia = @nomefantasia, codundcontrole = @codundcontrole, quantidade = @quantidade, preco1 = precoCotado_01,
    	 preco2 = precoCotado_02,preco3 = precoCotado_03,preco4 = precoCotado_04,preco5 = precoCotado_05, preconeg1 = precoNegociado_01,
    	 preconeg2 = precoNegociado_02,preconeg3 = precoNegociado_03,preconeg4 = precoNegociado_04, preconeg5 = precoNegociado_05, 
    	 menorpreco = precoMenor
    	where codcotacao = @codcotacao
    	 and codcoligada = @codcoligada
    	 and idprd = @idprd
    	 and idmov = @idmov
    
    	if @@rowcount = 0
    		 insert into zprecoscotados (codcotacao, codcoligada, idprd, idmov, codigoprd, nomefantasia, codundcontrole, quantidade,
    			preco1, preco2, preco3, preco4, preco5, preconeg1, preconeg2, preconeg3, preconeg4, preconeg5, menorpreco)
    		 select @codcotacao, @codcoligada, @idprd, @idmov, @codigoprd, @nomefantasia, @codundcontrole,
    		  @quantidade, precoCotado_01, precoCotado_02, precoCotado_03, precoCotado_04, precoCotado_05, 
    		  precoNegociado_01, precoNegociado_02, precoNegociado_03, precoNegociado_04, precoNegociado_05, 
    		  precoMenor
    		 from valoresSeparados

    Veja se funciona, fiz o melhor que pude com as informações que eu tinha!


    Carlos Eduardo Pieren - MCP
    • Sugerido como Resposta Carlos Eduardo Pieren terça-feira, 29 de setembro de 2009 14:28
    • Marcado como Resposta Ronnie Von quarta-feira, 30 de setembro de 2009 12:43
    terça-feira, 29 de setembro de 2009 14:27

Todas as Respostas

  • Ronnie,

    Sua stored procedure deve estar se perdendo em alguma parte do código, verifique as comando IF e também o bloco de processamento While.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 23 de setembro de 2009 19:55
  • Ronnie,

    Você pode montar a sua procedure desse jeito
    	with tabelaPrecos ( valcotacao, valnegociado, numLinha )
    	(	select codcfo, valcotacao, valnegociado
    		 row_number() over ( order by codcfo) as numLinha  
    		from tcitmorcamento
    		where tcitmorcamento.idprd = @idprd
    		 and tcitmorcamento.idmov =  @idmov
    		 and tcitmorcamento.codcotacao = @codcotacao
    		 and tcitmorcamento.codcoligada = @codcoligada
    		 and (tcitmorcamento.valcotacao > 0 or tcitmorcamento.valnegociado > 0)	)
    
    
    	with valoresSeparados (	precoCotado_01, precoCotado_02, precoCotado_03, precoCotado_04, 
    							precoCotado_05, precoNegociado_01, precoNegociado_02, precoNegociado_03, 
    							precoNegociado_04, precoNegociado_05, precoMenor )
    	(	select precoCotado_01 = sum(case numLinha when 1 then valcotacao else null),	
    		 precoNegociado_01 = sum(case numLinha when 1 then valnegociado else null),
    		 precoCotado_02 = sum(case numLinha when 2 then valcotacao else null),	
    		 precoNegociado_02 = sum(case numLinha when 2 then valnegociado else null),
    		 precoCotado_03 = sum(case numLinha when 3 then valcotacao else null),	
    		 precoNegociado_03 = sum(case numLinha when 3 then valnegociado else null),
    		 precoCotado_04 = sum(case numLinha when 4 then valcotacao else null),	
    		 precoNegociado_04 = sum(case numLinha when 4 then valnegociado else null),
    		 precoCotado_05 = sum(case numLinha when 5 then valcotacao else null),	
    		 precoNegociado_05 = sum(case numLinha when 5 then valnegociado else null),
    		 precoMenor = min(valnegociado)
    		from tabelaPrecos	)
    
    
    	select @idprd = tprd.idprd, @idmov = tccotacaoitmmov.idmov, @codigoprd = tprd.codigoprd, 
    	 @nomefantasia = tprd.nomefantasia, @codundcontrole = tprd.codundcontrole, @quantidade = titmmov.quantidade
    	from tccotacaoitmmov
    	 join titmmov 
    		on tccotacaoitmmov.idmov = titmmov.idmov
    		 and tccotacaoitmmov.codcoligada = titmmov.codcoligada
    		 and tccotacaoitmmov.nseqitmmov = titmmov.nseqitmmov
    	 join tprd 
    		on titmmov.idprd = tprd.idprd
    		 and titmmov.codcoligada = tprd.codcoligada
    	 join tmov 
    		on titmmov.idmov = tmov.idmov
    		 and titmmov.codcoligada = tmov.codcoligada
    	where tccotacaoitmmov.codcotacao = @codcotacao
    	and tccotacaoitmmov.codcoligada = @codcoligada
    
    	update zprecoscotados
    	set codcotacao = @codcotacao, codcoligada = @codcoligada, idprd = @idprd, idmov = @idmov, codigoprd = @codigoprd,
    	 nomefantasia = @nomefantasia, codundcontrole = @codundcontrole, quantidade = @quantidade, preco1 = precoCotado_01,
    	 preco2 = precoCotado_02,preco3 = precoCotado_03,preco4 = precoCotado_04,preco5 = precoCotado_05, preconeg1 = precoNegociado_01,
    	 preconeg2 = precoNegociado_02,preconeg3 = precoNegociado_03,preconeg4 = precoNegociado_04, preconeg5 = precoNegociado_05, 
    	 menorpreco = precoMenor
    	where codcotacao = @codcotacao
    	 and codcoligada = @codcoligada
    	 and idprd = @idprd
    	 and idmov = @idmov
    
    	if @@rowcount = 0
    		 insert into zprecoscotados (codcotacao, codcoligada, idprd, idmov, codigoprd, nomefantasia, codundcontrole, quantidade,
    			preco1, preco2, preco3, preco4, preco5, preconeg1, preconeg2, preconeg3, preconeg4, preconeg5, menorpreco)
    		 select @codcotacao, @codcoligada, @idprd, @idmov, @codigoprd, @nomefantasia, @codundcontrole,
    		  @quantidade, precoCotado_01, precoCotado_02, precoCotado_03, precoCotado_04, precoCotado_05, 
    		  precoNegociado_01, precoNegociado_02, precoNegociado_03, precoNegociado_04, precoNegociado_05, 
    		  precoMenor
    		 from valoresSeparados

    Veja se funciona, fiz o melhor que pude com as informações que eu tinha!


    Carlos Eduardo Pieren - MCP
    • Sugerido como Resposta Carlos Eduardo Pieren terça-feira, 29 de setembro de 2009 14:28
    • Marcado como Resposta Ronnie Von quarta-feira, 30 de setembro de 2009 12:43
    terça-feira, 29 de setembro de 2009 14:27
  • Carlos Eduardo vou verificar e ja retorno com o resultado, muito obrigado pela força


    Abraçoss
    terça-feira, 29 de setembro de 2009 19:37
  • Carlos Eduardo certinho, consegui resolver com o procedure que voce me passou. perfeito


    Muito Obrigado pela atenção


    Valeu mesmo
    quarta-feira, 30 de setembro de 2009 12:44

  • Disponha

    Carlos Eduardo Pieren - MCP
    quarta-feira, 30 de setembro de 2009 13:01