Usuário com melhor resposta
Trigger com IF

Pergunta
-
Bom dia Pessoal, estou em um impasse podem me ajudar por favor, criei a trigger abaixo com 2 condições if porem ele não esta entrando no 2° IF, esta somente parando no 1° IF, não sei mais o que tentar, eu defini a variavel @vlrmaxixo como 10000 e quando incluo um pedido maior que 10000 não esta caindo no if TESTE3 e TESTE4:(:
ALTER TRIGGER [dbo].[tI_ESTPED_INSERE_APROVADOR] ON [dbo].[ESTPED] AFTER UPDATE AS
--Alterado por Armando em 31/05/2017 - Incluído bloqueio para a aprovação de Pedidos que ultrapassem o valor da meta definida. Somente o Liberador poderá liberar o pedido.
BEGIN
SET NOCOUNT ON
DECLARE @situac VARCHAR(1),
@situac_deleted VARCHAR(1),
@numped INT,
@aprovador VARCHAR(100),
@liberador VARCHAR(100),
@errno INT,
@errmsg VARCHAR(255),
@codemp INT ,
@codset INT,
@libera VARCHAR(1),
@PEDRAT_CODCUS varchar(30),
@PEDRAT_ANALI INT,
@GRUPO INT,
@VLRORCAMENTO FLOAT,
@VLRACUMUPEDI FLOAT,
@VLRPEDIDO FLOAT,
@errono int,
@erromsg varchar(255),
@vlrmaximo decimal(10,2)
SELECT @numped = (SELECT TOP 1 INSERTED.NUMPED FROM INSERTED),
@situac = (SELECT TOP 1 INSERTED.SITUAC FROM INSERTED),
@aprovador = '',
@liberador = '',
@codemp = (SELECT TOP 1 RODFIL.CODEMP FROM INSERTED INNER JOIN RODFIL ON INSERTED.CODFIL = RODFIL.CODFIL),
@codset = (SELECT TOP 1 ESTREQ.CODSET FROM INSERTED INNER JOIN ESTIPE ON INSERTED.NUMPED = ESTIPE.NUMPED INNER JOIN ESTREQ ON ESTIPE.CODREQ = ESTREQ.CODREQ),
@libera = (SELECT TOP 1 INSERTED.LIBERA FROM INSERTED),
@situac_deleted = (SELECT TOP 1 DELETED.SITUAC FROM DELETED),
@PEDRAT_CODCUS = (SELECT TOP 1 CODCUS FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
@PEDRAT_ANALI = (SELECT TOP 1 ANALIT FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
@vlrmaximo = 10000,
@GRUPO = (SELECT TOP 1 CODCON FROM TMP_CODCUS T WHERE T.CODCON = @PEDRAT_CODCUS),
@VLRORCAMENTO = COALESCE((SELECT isnull(SUM(O.TMP_VLRORC),0) AS VALOR
FROM TMP_GRUPO_ANALITICA T LEFT OUTER JOIN TMP_ORCAMENTO_COMPRAS O ON T.TMP_ANALI = O.TMP_ANALIT
WHERE O.TMP_MES = MONTH(GETDATE()) AND
O.TMP_ANO = YEAR(GETDATE()) AND
t.tmp_anali = @PEDRAT_ANALI),0),
@VLRACUMUPEDI = COALESCE((SELECT isnull(SUM(ESTPED.VLRTOT),0)
FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
ESTPED.SITUAC in ('A', 'B', 'X') AND
ESTPED.LIBERA = 'S' AND
PEDRAT.ANALIT = @PEDRAT_ANALI
),0),
@VLRPEDIDO = COALESCE((SELECT SUM(ESTPED.VLRTOT)
FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
estped.numped = @numped
),0)
IF @situac = 'P'
BEGIN
IF @vlrpedido < @vlrmaximo
set @aprovador = 'TESTE1'
set @liberador = 'TESTE2'
END
ELSE
IF @situac = 'P'
BEGIN
IF @vlrpedido >= @vlrmaximo
set @aprovador = 'TESTE3'
set @liberador = 'TESTE4'
END
IF (@situac = 'P')
BEGIN
UPDATE ESTPED SET LOGAPR = COALESCE(@aprovador,'NENHUM'), loglib = COALESCE(@liberador,'NENHUM') WHERE ESTPED.NUMPED = @numped
END
Respostas
Todas as Respostas
-
-
Ola Jose bom dia, fiz a alteração citada mas ainda continuou caindo no 1° IF, segue abaixo como ficou após alteração.
IF @situac = 'P'
BEGIN
IF @vlrpedido < @vlrmaximo
BEGIN
set @aprovador = 'TESTE1'
set @liberador = 'TESTE2'
ENd
ELSE
BEGIN
set @aprovador = 'TESTE3'
set @liberador = 'TESTE4'
END
enD
IF (@situac = 'P')
BEGIN
UPDATE ESTPED SET LOGAPR = COALESCE(@aprovador,'NENHUM'), loglib = COALESCE(@liberador,'NENHUM') WHERE ESTPED.NUMPED = @numped
END
-
-
Eu setei na @VLRPEDIDO o numero do pedido que eu criei como teste no valor de 21000 e ai sim caiu no 2° IF mas não entendi o pq que a variável não esta recebendo o valor do pedido @numped.
@VLRPEDIDO = COALESCE((SELECT SUM(ESTPED.VLRTOT)
FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
estped.numped = 89039
),0) -
-
Ok mas esse trecho vai depois das declarações das variáveis antes do select?
DECLARE @situac VARCHAR(1),
@situac_deleted VARCHAR(1),
@numped INT,
@aprovador VARCHAR(100),
@liberador VARCHAR(100),
@errno INT,
@errmsg VARCHAR(255),
@codemp INT ,
@codset INT,
@libera VARCHAR(1),
@PEDRAT_CODCUS varchar(30),
@PEDRAT_ANALI INT,
@GRUPO INT,
@VLRORCAMENTO FLOAT,
@VLRACUMUPEDI FLOAT,
@VLRPEDIDO FLOAT,
@errono int,
@erromsg varchar(255),
@vlrmaximo decimal(10,2)
IF (SELECT count (*) from INSERTED) > 1
BEGIN
PRINT 'ERRO. Procedimento não aceita mais de uma linha alterada';
return;
END;
set @numped = (SELECT TOP 1 INSERTED.NUMPED FROM INSERTED);
set @situac = (SELECT TOP 1 INSERTED.SITUAC FROM INSERTED);
SELECT --@numped = (SELECT TOP 1 INSERTED.NUMPED FROM INSERTED),
--@situac = (SELECT TOP 1 INSERTED.SITUAC FROM INSERTED),
@aprovador = '',
@liberador = '',
@codemp = (SELECT TOP 1 RODFIL.CODEMP FROM INSERTED INNER JOIN RODFIL ON INSERTED.CODFIL = RODFIL.CODFIL),
@codset = (SELECT TOP 1 ESTREQ.CODSET FROM INSERTED INNER JOIN ESTIPE ON INSERTED.NUMPED = ESTIPE.NUMPED INNER JOIN ESTREQ ON ESTIPE.CODREQ = ESTREQ.CODREQ),
@libera = (SELECT TOP 1 INSERTED.LIBERA FROM INSERTED),
@situac_deleted = (SELECT TOP 1 DELETED.SITUAC FROM DELETED),
@PEDRAT_CODCUS = (SELECT TOP 1 CODCUS FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
@PEDRAT_ANALI = (SELECT TOP 1 ANALIT FROM PEDRAT WHERE PEDRAT.NUMPED = @numped),
@vlrmaximo = 10000,
@GRUPO = (SELECT TOP 1 CODCON FROM TMP_CODCUS T WHERE T.CODCON = @PEDRAT_CODCUS),
@VLRORCAMENTO = COALESCE((SELECT isnull(SUM(O.TMP_VLRORC),0) AS VALOR
FROM TMP_GRUPO_ANALITICA T LEFT OUTER JOIN TMP_ORCAMENTO_COMPRAS O ON T.TMP_ANALI = O.TMP_ANALIT
WHERE O.TMP_MES = MONTH(GETDATE()) AND
O.TMP_ANO = YEAR(GETDATE()) AND
t.tmp_anali = @PEDRAT_ANALI),0),
@VLRACUMUPEDI = COALESCE((SELECT isnull(SUM(ESTPED.VLRTOT),0)
FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
ESTPED.SITUAC in ('A', 'B', 'X') AND
ESTPED.LIBERA = 'S' AND
PEDRAT.ANALIT = @PEDRAT_ANALI
),0),
@VLRPEDIDO = COALESCE((SELECT SUM(ESTPED.VLRTOT)
FROM dbo.ESTPED AS ESTPED LEFT JOIN dbo.PEDRAT AS PEDRAT ON PEDRAT.NUMPED = ESTPED.NUMPED
LEFT OUTER JOIN TMP_GRUPO_ANALITICA T ON PEDRAT.ANALIT = T.TMP_ANALI
WHERE MONTH(ESTPED.DATPED) = MONTH(GETDATE()) AND
YEAR(ESTPED.DATPED) = YEAR(GETDATE()) AND
estped.numped = @numped
),0) -