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