none
Problemas com Procedure RRS feed

  • Pergunta

  • Boa Tarde,

    Criei uma procedure para fazer update em alguns registros. Mas o problema é o seguinte, coloquei no meu update que deve ser executado o set somente se o status for igual a 'I', mas ao rodar a proc, está alterando todos os registros, não somente os que estão com Status 'I'. O que pode estar errado?

    ALTER PROCEDURE [dbo].[SP_AlteraStatusPedidoAtivo]
    AS 
    BEGIN
    
    DECLARE @cliche VARCHAR(10), @statuscliche CHAR(1), @statuspedido INT;
    
    	--Declarando o cursor
    	DECLARE Cur_StatusCliche CURSOR FOR
    
    	--dados que o cursos ira trabalhar
    	SELECT SOPASTA_StatusCliche.Cliche, SOPASTA_StatusCliche.StatusCliche,
    		Pedidos.StatusPedido FROM SOPASTA_StatusCliche 
    		INNER JOIN itens ON SOPASTA_StatusCliche.Cliche = itens.CodFI
    		INNER JOIN Pedidos ON itens.CodFI = Pedidos.CodFI
    		--INNER JOIN OFs     ON Pedidos.Pedido = OFs.Pedido
    		WHERE SOPASTA_StatusCliche.StatusCliche = 'I' AND Pedidos.StatusPedido <> 4
    		ORDER BY Pedidos.Pedido
    
    
    	--abre o cursor 
    	OPEN Cur_StatusCliche;
    
            --posicionar o ponteiro do cursor na primeira linha do resultado do select acima
    		FETCH NEXT FROM Cur_StatusCliche
    		
    		--insere nas variaveis os valores da primeira linha do resultado armazenado no cursor
    		INTO @cliche, @statuscliche, @statuspedido
    
    		--Esse parte diz "Enquanto tiver linha no cursor, faça:"
    		WHILE @@FETCH_STATUS = 0
    
    		--Nessa parte você insere o bloco de instruções que ira trabalhar no seu cursor.
    			BEGIN
    				
    				SELECT SOPASTA_StatusCliche.Cliche, SOPASTA_StatusCliche.StatusCliche,
    					Pedidos.StatusPedido FROM SOPASTA_StatusCliche 
    					INNER JOIN itens ON SOPASTA_StatusCliche.Cliche = itens.CodFI
    					INNER JOIN Pedidos ON itens.CodFI = Pedidos.CodFI
    				WHERE /*@cliche = SOPASTA_StatusCliche.Cliche AND*/ @statuscliche = SOPASTA_StatusCliche.StatusCliche AND
    				@statuspedido = Pedidos.StatusPedido; 
    
    				
    				 
    
    				IF ((@statuspedido <> 4) AND (@statuscliche = 'I'))
    				--BEGIN
    				--UPDATE A SET a.StatusPedido = 4
    					--FROM Pedidos as a,SOPASTA_StatusCliche as b
    					--where a.StatusPedido  = @statuspedido
    			  --AND b.Status = @statuscliche AND @statuscliche = 'I'; 
    				
    				begin
    				UPDATE A SET StatusPedido = 4
    					FROM Pedidos as a,SOPASTA_StatusCliche as b
    					where a.StatusPedido  = @statuspedido
    					  AND b.StatusCliche = 'I'
    					END;
    
    				
    
    			
    				--UPDATE OFS SET RazaoSuspOF = 'Bloqueio: CQ' WHERE Pedido = @pedido AND Item = @item;
    
    				 FETCH NEXT FROM Cur_StatusCliche INTO  @cliche, @statuscliche, @statuspedido;
    			END;
    	CLOSE Cur_StatusCliche;
    	DEALLOCATE Cur_StatusCliche
    
    END

    quarta-feira, 9 de abril de 2014 19:30

Respostas